for循环忽略单词长度为1

时间:2014-06-03 18:19:50

标签: for-loop splice

我正在研究这个问题:

  

编写一个函数filterLongWords(),它接受一个单词数组和一个整数i,并返回比i长的单词数组。

我记下来了,除了某些原因,如果有一个单词只有一个字符长,它就不会被删除。有谁知道我做错了什么?谢谢。

function filterLongWords(i, array){
for (var x = 0; x<array.length; x++){
    if (array[x].length <= i){
        array.splice(x,x);
    }
}
console.log(array)
}

var wordArray = ["i", "am", "longer", "than", "one"];

filterLongWords(2, wordArray);

1 个答案:

答案 0 :(得分:5)

这里有几个问题。

首先,splice的参数为(index, number of items),因此您需要致电 array.splice(x,1)

其次,当您从数组中删除某个项目时,该数组会缩短,但x仍然会前进(有效地跳过下一个项目)。从阵列中删除项目后,您可以使用x--;对此进行抵消。

function filterLongWords(i, array){
for (var x = 0; x<array.length; x++){
    if (array[x].length <= i){
        array.splice(x,1);
        x--;
    }
}
console.log(array)
}