使用JavaScript的foreach从数组中移除项目

5

使用foreach循环从数组中删除元素是否可行?

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

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

console.log(array);

2
为什么不使用filter呢?!!! - Bergi
你说得有道理。 - user2916134
3个回答

3

我建议不要使用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);
    }
}

Fiddle: https://jsfiddle.net/uu94y8Lx/


2
试试这样做:
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);

1
这不可行。请参考以下 jsfiddle 链接:https://jsfiddle.net/txzabe48/ 在 foreach 循环期间删除元素会影响迭代器。我建议使用倒序 for 循环并按索引进行删除。 - Mario Tacke
1
@MarioTacke:更新了我的回答! - Rahul Tripathi

2

我不建议这样做。forEach函数遍历数组时,如果你删除当前或之前的一个元素,那么它会跳过数组中的下一个元素。话虽如此,如果你真的想要删除一个元素而不管遇到的问题,那么可以使用array.splice(data, 1)来删除一个元素。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接