for循环忽略单词长度为1

use*_*912 0 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);
Run Code Online (Sandbox Code Playgroud)

Ben*_*tle 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)
}
Run Code Online (Sandbox Code Playgroud)