用函数实现Split方法

时间:2019-06-04 22:20:43

标签: javascript function split jsbin

我想用一个函数实现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',','));
}

1 个答案:

答案 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,从而使代码更小。

以上所有结果:

https://jsbin.com/mejayuv/1/edit?html,js,console,output