Javascript hasher嵌套函数

时间:2014-10-21 22:06:31

标签: javascript arrays function for-loop

我正在尝试创建一个能够修剪不是4个字符长的数组值的函数。出于某种原因,它不起作用。我认为它可能与return语句有关,但我不确定,我需要帮助。以下是该功能的代码:(请不要建议让哈希更好的方法,我只需要帮助这个功能)

function cutit(seq){
        for(var i=0;i<seq.length;i++){
            var temparr=seq[i].split("");
            if(temparr.length % 4 !== 0){
                seq.splice(seq[i],1);
                return seq;
            }
        }
    }

1 个答案:

答案 0 :(得分:1)

五件事:

  • 是的,return应该在循环之后发生,而不是在第一个要删除的项目之后。
  • .splice()获取第一个参数的索引,而不是元素。通过i代替seq[i]
  • splice(…, 1)确实会减少您重复一次的数组的长度。你需要处理这个并减少你的计数器,以便再次查看i索引,下一个元素将在下一次迭代中的位置。
  • 不是将字符串拆分成单个字符数组并取其长度,而是直接取字符串的长度。
  • 您的函数会删除所有不是多个 4长的字符串,而不是所有不完全不是4个字符的字符串。不确定是否有意。

function cutit(seq) {
    for (var i=0; i<seq.length; i++) {
        if (seq[i].length !== 4) {
            seq.splice(i--, 1);
        }
    }
    return seq;
}

另外,请注意,改变数组很少是一个好主意(特别是像这样的低效方式,有多个拼接)。返回一个新数组要容易得多,你可以使用高阶filter Array method

function cutit(seq) {
    return seq.filter(function(str) {
        return str.length === 4;
    });
}