forEach的问题?

image.png

删除数组中等于2,但是这个为啥没有成功,我想不到哪里有问题

阅读 1.5k
2 个回答

首先说明:forEach() 是不推荐在遍历过程中修改数组的。


为什么它只成功删除了一个 2 呢,因为它的遍历过程类似于这样:

for (let i = 0; i < arr.length; i++) {
    //...
}

于是就成了 0, 1, 2, 3, 4...n,而在这个过程中将位于 arr[1] 的元素移除了,那么后续的元素往前补,arr[2] 就成了 3,而不是第二个 2

而你的想法是这样:

const cloneArr = [...arr];
for (let i = 0; i < cloneArr.length; i++) {
    // ...
}

但是请注意,如果真是这样,反而会错的离谱,因为在第一次删除后,arr 当中元素的位置就已经变了,你能保证第二次删除的会是谁吗。


再补充一点,这种需求可以实现的,那就是 Array.prototype.filter()

原数组改变了。当你删了第一个2之后,nums变成了[1,2,3,3],下一次循环的时候 index 已经是2了,而这时候第二个你需要的删除的2的index是1,已经跳过去了

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