sna*_*che 7 javascript arrays for-loop
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--;
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码采用任意长度的数组并检查每个值.如果数组的位满足任意条件(在这种情况下,如果它是奇数),则从数组中删除它.
Array.prototype.splice()用于从数组中删除值,然后i递减以考虑数组中"向下移动"的其余值以填充已移除的值留下的间隙(因此循环不会跳过某个值).
但是,for当i等于数组的长度时,循环结束,当删除值时,循环会变短.
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);Run Code Online (Sandbox Code Playgroud)