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