【问题标题】:Remove item from array using foreach - JavaScript [duplicate]使用 foreach 从数组中删除项目 - JavaScript [重复]
【发布时间】:2015-08-19 11:50:48
【问题描述】:

是否可以使用 foreach 从数组中删除某些内容?

var array = [1,2,3,4,5,6,7,8];

array.forEach(function(data){
    if (data == 4) {
        // do something here
    }
});

console.log(array);

【问题讨论】:

  • 你为什么要这样做?使用filter!!!
  • 你说得有道理。

标签: javascript functional-programming


【解决方案1】:

试试这样:

array.forEach(function(data){
   if (data == 4){
      console.log('done')
      array.splice(data, 1);
   }
});

正如 mario 所评论的,不建议修改您正在循环的数组,因此您可以这样做:

var array1 = [];
array.forEach(function(data){
    if(array.length === 4){
        array1.push(data);
    }
});

你也可以像这样使用 for 循环:

var array = [1,2,3,4,5,6,7,8],i;

for (i = 0; i < array.length; ++i) {
    if (array[i] === 4) {
        array.splice(i--, 1);
    }
}

console.log(array);

【讨论】:

  • 这不起作用。请参阅小提琴:jsfiddle.net/txzabe48 在 foreach 期间删除项目会影响迭代器。我建议做一个反向循环并按索引删除。
  • @MarioTacke:- 更新了我的答案!
【解决方案2】:

我建议不要使用 forEach 函数。它影响迭代器并跳过下一项。更好:使用反向 for 循环并按索引删除项目。

var array = [1,2,3,4,5,6,7,8];

for (var i = array.length - 1; i > -1; i--) {
    if (array[i] == 4) {
        array.splice(i, 1);
    }
}

小提琴:https://jsfiddle.net/uu94y8Lx/

【讨论】:

    【解决方案3】:

    我不会推荐这个。 forEach 函数遍历数组,当您删除当前或上一个项目时,它将跳过数组中的下一个项目。话虽如此,如果您真的想删除一个项目,尽管您会遇到问题,可以使用array.splice(data, 1) 删除一个项目。

    【讨论】:

      猜你喜欢
      • 2012-12-06
      • 1970-01-01
      • 2013-08-03
      • 2020-01-24
      • 1970-01-01
      • 2021-07-20
      • 1970-01-01
      • 1970-01-01
      • 2011-12-02
      相关资源
      最近更新 更多