数组塌陷


var colors = ["red", "blue", "grey"];

for(let i = 0; i<colors.length;i++){
    colors.splice(i,1);
}

console.log(colors);// ["blue"] 
//因为splice删除的关系for到index为1的时候,指向的不是blue而是grey,这就是数组塌陷
//foreach也有这个问题

解决办法

1. 下标 i–

var colors = ["red", "blue", "grey"];
for(let i = 0; i<colors.length;i++){
    colors.splice(i,1);
    i--;
}
console.log(colors);// [] 在删除的时候给i--就能避免数组塌陷带来的问题

又或者以下例子更好说明

var colors = ["red", "blue", "grey"];
for(let i = 0; i<colors.length;i++){
    if(colors[i] == "red"){
     colors.splice(i,1);
     i--;
    }
}
console.log(colors);// ["blue", "grey"] 在删除的时候给i--就能避免数组塌陷带来的问题

2. 从后边删除

var colors = ["red", "blue", "grey"];
for(let i = colors.length-1; i>= 0;i--){
     colors.splice(i,1);
}
console.log(colors);// [] 这样也是没有问题的

文章作者: iamfugui
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 iamfugui !
评论
  目录