我想用一个函数来实现split方法
这就是我想要达到的目标
var string = 'aa,bb,c';
var separator = ',';
var stringList = string.split(separator);
function splitString() {
console.log(stringList);
}这将返回此array
["aa", "bb", "c"]我正尝试用一个函数实现同样的功能,但它返回一个空的array [] and not ["aa", "bb", "c"]
我已经为那些可以提供帮助的人创建了一个jsbin。
function split(string,separator) {
var cache = [];
var cachInt = 0;
var lastWord = '';
for (var i = 0; i < string.length; i++) {
if(string[i] === separator) {
cachInt++
lastWord = ''
}
else {
lastWord = lastWord + string[i];
cache[cachInt] == lastWord;
}
}
return cache;
}
function splitString() {
console.log(split('string, separator',','));
}发布于 2019-06-05 06:26:40
您可以执行以下操作:
cache[cachInt] == lastWord;这应该是,因为你不是在比较,而是在赋值:
cache[cachInt] = lastWord;既然我们做到了,还有改进的余地。你的版本有上面提到的这一行。这行代码在i的每次迭代中都会运行。这并不是真正需要的,因为您只想在拆分时执行保存:
if(string[i] === separator) {
cache[cachInt] = lastWord; // Only assign when we find a seperator
cachInt++
lastWord = ''
} else {
lastWord = lastWord + string[i];
}这有一个小问题:字符串的最后一部分通常没有分隔符,它是a,b,c而不是a,b,c,。我们可以通过在for之后进行检查来轻松解决这个问题,看看您是否还有剩余的东西:
if( lastWord!=='' ){
cache[cachInt] = lastWord;
}
return cache;这有一个额外的特性,它可以作为一个rtrim()工作(你是否想要它取决于你自己)。
另外,如果你不需要支持老版本的IE,那么就不要使用var,而是使用let。如果你想知道为什么,this question explains it well。
然后,您将使用计数器来记住要使用哪个cachInt。因为我们现在只在每个"cacheInt“中使用它一次,例如每个单词一次,我们知道每个加法都是+1,并且每个单词只发生一次。我们也并不真正关心索引,我们只希望每个单词都添加一次。因此,您可以使用cache[] = lastWord,或者使用push,后者稍微更简洁一些:cache.push(lastWord)。
通过删除此计数器的用法,还可以删除函数开头的cachInt++和let/var cachInt,从而使代码更小。
以上所有情况的结果:
https://stackoverflow.com/questions/56452049
复制相似问题