美文网首页
记数组splice的小坑

记数组splice的小坑

作者: 甘草子XS | 来源:发表于2021-07-06 23:39 被阅读0次
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 != '';
})

相关文章

网友评论

      本文标题:记数组splice的小坑

      本文链接:https://www.haomeiwen.com/subject/bjmnultx.html