javascript - 在 map 函数中调用 splice

标签 javascript splice array-splice

我有以下代码:

var a = [{a: 1}, {a: 2}, {a: 3}];
a.map(function (item, index) {
  console.log('call');
  if (index < 1) {
    a.splice(index, 1);
  }
});

但是call只打印了两次,我期望打印三次。我知道 splice 弄乱了数组,但是对于这种行为有一些解决方法吗?

谢谢!

最佳答案

如果您想在迭代数组时修改它,那么很多时候,最好使用普通的旧 for 循环,因为您可以控制迭代并更正您的修改。

如果您的修改只是删除当前元素,那么向后的 for 循环是最简单的,因为您在删除当前元素时不必做任何更正。这是一个例子:

var x = [{a: 1}, {a: 2}, {a: 3}];
for (var i = x.length - 1; i >= 0; i--) {
    if (x[i].a === 2) {
        // remove current element
        x.splice(i, 1);
    }
}

如果您不介意创建一个新数组作为迭代的结果,您可以使用其他方法,例如 .filter()

关于javascript - 在 map 函数中调用 splice,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23399386/

相关文章:

php - array_splice() 在循环内无法正常工作

javascript - Angularjs 在表格中的选定范围内应用颜色

javascript - 从初始数组中删除与初始数组后面的参数具有相同值的所有元素

javascript - 拼接不从数组 javascript 中删除项目

c++ - (某种)在 C++ 中旋转和切片容器的元素

javascript - Angular JS 拼接不起作用

PHP:在作为 foreach() 主题的数组上使用 array_splice 会导致问题吗?

javascript - 从字符串的开头删除特殊字符并在 javascript 中搜索 @symbol.

javascript - 无法使用innerHTML从HTML字符串创建某些类型的节点

javascript - 选项卡列表问题