Tôi đang cố gắng tạo một hàm đơn giản lấy một chuỗi và một dấu phân cách và sau đó chia chuỗi thành một mảng dựa trên giá trị Delimiter. Tôi đang cố gắng viết chức năng này mà không sử dụng phương thức chia trong JavaScript. Vì vậy, nói rằng tôi có một sampleInput = '123 $ 456 $ 789' và DELIMITER = '$' Sau đó, Chức năng StringDelImiter (SampleInput, Delimiter) sẽ trả về ['123', '456', '789'].
var stringDelimiter = function (sampleInput, delimiter) { var stringArray = []; var garbageArray = []; var j = 0; for (var i = 0; i < sampleInput.length; i++) { if (sampleInput.charAt(i) == delimiter) { garbageArray = sampleInput.charAt(i); j++; } else { if (!stringArray[j]) stringArray[j] = ''; stringArray[j] += sampleInput.charAt(i); } } return stringArray; }Vấn đề tôi đang gặp phải là nếu dấu phân cách xuất hiện ở đầu chuỗi, nó sẽ trả về phần tử đầu tiên của mảng không xác định. Tôi bị mắc kẹt về cách tôi có thể xử lý trường hợp này. Vì vậy, nếu tôi có sampleInput = '$ 123 $ 456 $ 789' và delimiter = '$', nó trả về ['123', '456', '789'] và không ['không xác định', '123', '456', '789' ]. Bất kỳ trợ giúp sẽ được đánh giá cao.
Đã hỏi ngày 15 tháng 7 năm 2014 lúc 18:38Jul 15, 2014 at 18:38
8
Điều này đơn giản hơn một chút và nó có thể làm những gì bạn muốn:
var stringDelimiter = function (sampleInput, delimiter) { var stringArray = ['']; var j = 0; for (var i = 0; i < sampleInput.length; i++) { if (sampleInput.charAt(i) == delimiter) { j++; stringArray.push(''); } else { stringArray[j] += sampleInput.charAt(i); } } return stringArray; }garbageArray của bạn dường như không cần thiết.
Đã trả lời ngày 15 tháng 7 năm 2014 lúc 19:09Jul 15, 2014 at 19:09
Scott Sauyetscott SauyetScott Sauyet
46,8K4 Huy hiệu vàng44 Huy hiệu bạc96 Huy hiệu đồng4 gold badges44 silver badges96 bronze badges
Điều gì về việc sử dụng các biểu thức thông thường?
function x_split(s) { return s.match(/([^$]+)/g); }Ví dụ. //jsfiddle.net/2f9mx/2/
Scott Sauyet
46,8K4 Huy hiệu vàng44 Huy hiệu bạc96 Huy hiệu đồng4 gold badges44 silver badges96 bronze badges
Điều gì về việc sử dụng các biểu thức thông thường?Jul 15, 2014 at 19:14
Ví dụ. //jsfiddle.net/2f9mx/2/Bill
Scott Sauyet7 silver badges12 bronze badges
5
Đã trả lời ngày 15 tháng 7 năm 2014 lúc 19:14
BillbillJul 15, 2014 at 18:40
1.2277 huy hiệu bạc12 Huy hiệu đồng
Nếu ký tự hiện tại là dấu phân cách và nếu lần lặp hiện tại là 0, hãy tiếp tục
Đã trả lời ngày 15 tháng 7 năm 2014 lúc 18:40
function CustomSplit(str, delimiter, removeEmptyItems) { if (!delimiter || delimiter.length === 0) return [str]; if (!str || str.length === 0) return []; var result = []; var j = 0; var lastStart = 0; for (var i=0;i<=str.length;) { if (i == str.length || str.substr(i,delimiter.length) == delimiter) { if (!removeEmptyItems || lastStart != i) { result[j++] = str.substr(lastStart, i-lastStart); } lastStart = i+delimiter.length; i += delimiter.length; } else i++; } return result; }Hàm này chấp nhận một chuỗi, dấu phân cách và cờ nếu các phần tử trống (hay còn gọi là không xác định, null hoặc chuỗi trống) nên được xóa khỏi mảng kết quả. (Không được kiểm tra, nó là một mã nhanh cho đến bây giờ.)Jul 15, 2014 at 18:44
CẬP NHẬTZoltán Tamási
Bây giờ nó đã được thử nghiệm (một chút) và đã sửa, và tôi đã tạo ra một JSFiddle ở đây. Bên cạnh đó, nó hỗ trợ dấu phân cách trống, chuỗi đầu vào trống và dấu phân cách có độ dài> 1.8 gold badges61 silver badges88 bronze badges
3
Đã trả lời ngày 15 tháng 7 năm 2014 lúc 18:44
Zoltán Tamásizoltán Tamási
function splitString(sampleInput: string, delimiter: string): string[] { let stringArray = [''] let j = 0 for (let i = 0; i < sampleInput.length; i++) { if (sampleInput.charAt(i) == delimiter) { j++; stringArray.push('') } else { stringArray[j] += sampleInput.charAt(i) } } return stringArray }11.7k8 Huy hiệu vàng61 Huy hiệu bạc88 Huy hiệu Đồng
let myString = "Lorem ipsum dolor sit amet" let myArray = splitString(myString, " ") myArray[0] // "Lorem" myArray[1] // "ipsum"Trong trường hợp ai đó cần một cái cho TypeScript (và vi khuẩn mà tôi đã viết), đây là phiên bản thay đổi của câu trả lời @scott Sauyet cho TypeScript:May 7, 2019 at 13:57
Mật mã:Artur Barseghyan
Ví dụ sử dụng4 gold badges49 silver badges40 bronze badges
3
Đã trả lời ngày 7 tháng 5 năm 2019 lúc 13:57
const splitCode = (strValue, space) => { let outPutArray = []; let temp = ''; for(let i= 0; i< strValue.length; i++){ let temp2 = ''; for(let j= i; j<space.length+i;j++){ temp2 = temp2+strValue[j]; } if(temp2 === space){ outPutArray.push(temp); i=i+space.length-1; temp = ''; }else{ temp = temp+strValue[i]; } } return outPutArray.concat(temp) }Artur Barseghyanartur BarseghyanJan 4 at 10:56
Huy hiệu vàng 11.5k449 Huy hiệu bạc40 Huy hiệu đồngAwais Ibrar
Bạn có thể sử dụng phương pháp này3 silver badges12 bronze badges