如何在不中断 For 循环的情况下遍历数组并删除项目

在本教程中,我们将找到一种在不中断 for 循环的情况下遍历数组并删除项目的优雅方式。

splice() 方法用于移除一个元素;但是,当我们运行 splice() 时,数组正在重新索引,这意味着我们将在删除索引时跳过索引。
要修复它,我们可以在 splice() 之后递减 i 或者简单地反向迭代:

let elements = [1, 3, 3, 5, 3, 1, 4];
for (let i = 0; i < elements.length; i++) {
  if (elements[i] == 3) {
    elements.splice(i, 1);
  }
}
console.log(elements);
let elements = [1, 3, 3, 5, 3, 1, 4];
let removeEl = 3;
let index = elements.indexOf(removeEl);
while (index !== -1) {
  elements.splice(index, 1);
  index = elements.indexOf(removeEl);
}
console.log(elements);
let elements = [1, 3, 8, 5, 16, 1, 4];
for (i = elements.length - 1; i >= 0; --i) {
  if (elements[i] % 2 === 0) {
    elements.splice(i, 1); //Remove even numbers
  }
}
console.log(elements);

这将防止重新索引影响迭代中的下一项,因为索引仅对从当前点到数组末尾的项有影响,并且在迭代中,下一项低于当前点。

splice() 方法

splice() 方法通过删除或者替换现有元素或者在适当位置添加新元素来修改 Array 的内容。
虽然它就地更改了原始数组,但它仍然返回已删除项目的列表。
如果没有移除的数组,则返回一个空数组。

日期:2020-06-02 22:16:22 来源:oir作者:oir