我想用一个函数实现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',','));
}
答案 0 :(得分:2)
您这样做:
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
或使用推挤(稍微更整洁):cache.push(lastWord)
。
通过删除此计数器的使用,您还可以删除函数开头的cachInt++
和let/var cachInt
,从而使代码更小。
以上所有结果: