使用forEach遍历数组,删除不符合条件的元素时,发现有的元素没有删掉,原因是forEach不会重置索引
例如下面数组,id=1 / type=pdf的元素需要删除掉,会发现删除第0项后,第1项没有删除成功,因为第0项被删除后,第一项补位到了第0项的位置,但是索引没有重新计算,索引自增1,接着循环了数组第1项,导致补位上去的第0项没有访问到
var arr = [
{
id: 0,
type: 'image'
},
{
id: 1,
type: 'pdf'
},
{
id: 2,
type: 'xlsx'
},
{
id: 3,
type: 'mp3'
}
]
arr.forEach((item, index) => {
if (item.id === 0) {
arr.splice(index, 1)
}
if (item.type === 'pdf') {
arr.splice(index, 1)
}
})
解决方法:过滤数组,当然首选filter
了。。
arr = arr.filter((item) => {
return item.id !== 0 && item.type !== 'pdf'
})