splice删除数组元素会出现问题 js

用splice方法删除数组下面元素会有问题,是index导致的

let arr = [{xxx:[1,2,3]},{xxx:[]},{xxx:[4,5,6]},{xxx:[11]},{xxx:[55]},{xxx:[]},{xxx:[]},{xxx:[88]}]
arr.forEach((item,index)=>{
  if (item['xxx'].length==0) {
    arr.splice(index,1)
  }
})

//输出结果是 [{xxx:[1,2,3]},{xxx:[4,5,6]},{xxx:[11]},{xxx:[55]},{xxx:[]},{xxx:[88]}] //发现还有一个没删除成功
阅读 4.6k
3 个回答

用倒序就行了,至少下标不会被改变,感谢各位大牛回答

let arr = [{xxx:[1,2,3]},{xxx:[]},{xxx:[4,5,6]},{xxx:[11]},{xxx:[55]},{xxx:[]},{xxx:[]},{xxx:[88]}]
for (let i = arr.length-1; i >= 0; i--) {
   if (!arr[i]['xxx'].length) arr.splice(i,1)
} 

你在一边改arr一边遍历 当然会有问题了 直接用filter多好
arr.filter(item => item.xxx.length)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题