let arr = [
{name: '', age: 0}
{name: '', age: 1},
{name: '', age: 2},
{name: '', age: 3},
]
for(let i = 0; i < arr.length; i++ ){
if(arr[i].name == ''){
arr.splice(i, 1);
}
}
console.log(arr);
期待的结果是 arr是空数组,然后此时的结果却是
[
{name: '', age: 1},
{name: '', age: 3}
]
其实原因很简单,因为splice是直接操作并修改数组的,for循环到下标0,发现name是空,删除后,去循环下标为1的数据,而此时age为1的item的下标已经变成了0,所以跳过了,以此类推,最后打印出来的数组自然就有2条数据了。
解决办法是从后往前循环
for(let i = arr.length - 1; i > -1; i--){
if(arr[i].name == ''){
arr.splice(i, 1);
}
}
这样就出来正确的结果了
当然了,在这个案例里用数组的filter方法才是正确的打开方式
arr = arr.filter(el => {
return el.name != '';
})
网友评论