javascript – 在循环JS数组的值时,我删除了值,我是否需要使用while而不是for?

前端之家收集整理的这篇文章主要介绍了javascript – 在循环JS数组的值时,我删除了值,我是否需要使用while而不是for?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
var myArray = [1,2,3,4,5,6,7,8,9];

function isOdd(value){
    return value % 2;
}

for(var i = 0; i < myArray.length; i++){
    if(isOdd(myArray[i])){
        myArray.splice(i,1);
        i--;
    }
}

上面的代码采用任意长度的数组并检查每个值.如果数组的位满足任意条件(在这种情况下,如果它是奇数),则从数组中删除它.

Array.prototype.splice()用于从数组中删除值,然后i递减以说明数组中其余值“向下移动”以填充删除的值留下的间隙(所以循环不会跳过一个值).

但是,当i等于数组的长度时,for循环结束,随着值的移除,数组的长度变短.

myArray.length的值是否随着循环的进行而动态减少,还是在循环开始时保存值而不是在删除值时更新?如果是后者,我该怎么做才能修复我的循环?

谢谢!

解决方法

myArray.length随着数组上的操作而改变.但是,如果没有适当的填充,循环和拼接会导致不需要的结果.

为防止不必要的更正,请从末尾使用while循环,以保留阵列的其余部分以进行处理.

function isOdd(value) {
    return value % 2;
}

var myArray = [1,9],i = myArray.length;

while (i--) {
    if (isOdd(myArray[i])) {
        myArray.splice(i,1);
    }
}
console.log(myArray);

猜你在找的JavaScript相关文章