为什么用map删除数组里的元素一次性删不干净?

clipboard.png
比如这个数组对象,state==3的时候我删除这个元素,可是问题来了,远行之后发现结果如下图

clipboard.png
不知道什么情况

阅读 5.8k
6 个回答

[1,2,3,4]
index = 0删了1变成[2,3,4]
index = 1直接跳过了2。

这是你删除了导致date的数组变动了的原因,比如你把索引2删掉了,原来是3的变成了2,而下一次是删除索引3,所以改变位置的3不会被删除,解决办法用倒序删除(var i = arr.length-1;i>=0;i--)或者用filter过滤

//原因可能是splice的问题,你splice操作之后,数组变化了,splice话,你可能要考虑倒着遍历。
可以这样:item.date.filter(v=>v.state==3)

用splice删除会改变原数组。map遍历删除一个之后,原数组已经改变,而index是从index+1继续向下遍历

在map遍历的时候,你执行了splice(),导致在应该取到下一个元素之前,下一个元素被改到了本身位置之前。
你可以把state:3都分别改成4,5,6,7,8...,之后判断条件改成if(t.state>=3),再看看输出结果就明白了~

你在map数组的同时,还在改着这个数组?本身这个逻辑就有问题吧?
map()方法返回一个由原数组中的每个元素调用一个指定方法后的返回值组成的新数组
建议你把符合条件的选项return出来就好了,这样新的数组就是符合你要求的数组。

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