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);

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...