我正在尝试创建一个简单的函数,它接受一个字符串和一个分隔符,然后根据分隔符值将字符串拆分成一个数组。我正在尝试编写此函数而不使用javascript中的split方法。所以说我有一个sampleInput = '123 $ 456 $ 789'和一个delimiter ='$'然后函数stringDelimiter(sampleInput,delimiter)将返回['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;
}
我遇到的问题是如果分隔符出现在字符串的开头,则返回数组的第一个元素undefined。我被困在如何处理这个案子。因此,如果我有sampleInput ='$ 123 $ 456 $ 789'和delimiter ='$',则返回['123','456','789']而不是['undefined','123','456','789' ]。 任何帮助将不胜感激。
答案 0 :(得分:2)
这有点简单,它可能会做你想要的:
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
似乎没必要。
答案 1 :(得分:0)
如果当前字符是分隔符,并且当前迭代为0,则继续
答案 2 :(得分:0)
如果应从结果数组中删除空(即未定义,空或空字符串)元素,则此函数接受字符串,分隔符和标志。 (未经测试,现在它是一个快速代码。)
更新
现在它经过测试(一点点)并得到纠正,我创建了一个jsFiddle here。此外,它支持空分隔符,空输入字符串和长度> 1的分隔符。 1。
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;
}
答案 3 :(得分:0)
答案 4 :(得分:0)
如果有人需要一个TypeScript(以及我为之编写的MicroBit),这是@Scott Sauyet的TypeScript答案的变更版本:
代码:
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
}
用法示例
let myString = "Lorem ipsum dolor sit amet"
let myArray = splitString(myString, " ")
myArray[0] // "Lorem"
myArray[1] // "ipsum"
答案 5 :(得分:-1)
function split(str){
var stringArray = [];
for(let i=0;i<str.length;i++){
stringArray.push(str[i]);
}
return stringArray;
}
console.log(split("suraj"));