使用foreach-JavaScript从数组中删除项

使用foreach-JavaScript从数组中删除项,javascript,functional-programming,Javascript,Functional Programming,是否可以使用foreach从数组中删除某些内容 var array = [1,2,3,4,5,6,7,8]; array.forEach(function(data){ if (data == 4) { // do something here } }); console.log(array); 试着这样做: array.forEach(function(data){ if (data == 4){ console.log('done')

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

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

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

console.log(array);
试着这样做:

array.forEach(function(data){
   if (data == 4){
      console.log('done')
      array.splice(data, 1);
   }
});
var array1 = [];
array.forEach(function(data){
    if(array.length === 4){
        array1.push(data);
    }
});
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);
另外,正如mario所评论的,不建议修改正在循环的阵列,因此您可以这样做:

array.forEach(function(data){
   if (data == 4){
      console.log('done')
      array.splice(data, 1);
   }
});
var array1 = [];
array.forEach(function(data){
    if(array.length === 4){
        array1.push(data);
    }
});
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);
您还可以像这样使用for循环:

array.forEach(function(data){
   if (data == 4){
      console.log('done')
      array.splice(data, 1);
   }
});
var array1 = [];
array.forEach(function(data){
    if(array.length === 4){
        array1.push(data);
    }
});
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);
var数组=[1,2,3,4,5,6,7,8],i;
对于(i=0;i
我不建议这样做。forEach函数在数组中迭代,当删除当前项或上一项时,它将跳过数组中的下一项。也就是说,如果你真的想删除一个项目,尽管你会遇到一些问题,那么可以使用
array.splice(data,1)
删除一个项目。我建议不要使用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:foreach期间删除项会影响迭代器。我建议对循环执行反向操作并按索引删除。@MarioTacke:-更新了我的答案!你为什么要这么做?使用
过滤器
!!!你说得有道理。