首先说明: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()。
首先说明:
forEach()
是不推荐在遍历过程中修改数组的。为什么它只成功删除了一个
2
呢,因为它的遍历过程类似于这样:于是就成了
0, 1, 2, 3, 4...n
,而在这个过程中将位于arr[1]
的元素移除了,那么后续的元素往前补,arr[2]
就成了3
,而不是第二个2
。而你的想法是这样:
但是请注意,如果真是这样,反而会错的离谱,因为在第一次删除后,
arr
当中元素的位置就已经变了,你能保证第二次删除的会是谁吗。再补充一点,这种需求可以实现的,那就是
Array.prototype.filter()
。