微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

原文地址:https://www.jb51.cc/js/157645.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐