gpt4 book ai didi

javascript - 当循环遍历 JS 数组的值并删除值时,是否需要使用 while 而不是 for?

转载 作者:数据小太阳 更新时间:2023-10-29 04:47:26 27 4
gpt4 key购买 nike

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, 2, 3, 4, 5, 6, 7, 8, 9],
i = myArray.length;

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

关于javascript - 当循环遍历 JS 数组的值并删除值时,是否需要使用 while 而不是 for?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37853965/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com