如何使用forEach删除列表中的元素?

时间:2011-08-05 00:41:36

标签: javascript list node.js

var people = ['alex','jason','matt'];

people.forEach(function(p){
    if(p.length > 4){
       //REMOVE THIS PERSON or pop it out of the list or whatever
    }
});

console.log(people) //should return ['alex','matt']

我想使用forEach循环从列表中删除一个元素。

5 个答案:

答案 0 :(得分:55)

使用合适的工具来完成正确的工作。在这种情况下:

for (var i = 0; i < data.length; i++) {
    if (data[i].value === 5) {
        data.splice(i--, 1);
    }
}

或@nnnnnn建议,向后循环:

for (var i = data.length-1; i >= 0; i--) {
    if (data[i].value === 5) {
        data.splice(i, 1);
    }
}

但是,您应该考虑使用Array.prototype.filter()

data = data.filter(function (e) {
    return e.value !== 5;
});

或实用程序函数库,例如lodashunderscore,它提供了从数组中删除元素的功能:

_.remove(data, function (e) {
    return e.value === 5;
});

后两者的好处是你的代码变得更具可读性。

答案 1 :(得分:28)

不应该修改你正在循环的数组。但是你可以制作一个新的:

var newPeople = [];
people.forEach(function(p){
    if(p.length <= 4){
        newPeople.push(p);
    }
});

答案 2 :(得分:1)

ForEach,因为ES5可以与索引一起使用:

data.forEach(function (element, index) {
  if (element % 2 == 0) {
    data.splice(index, 1);
  }
});

答案 3 :(得分:0)

您可以使用filter()轻松完成此操作:

var people = ['alex','jason','matt'];

var shortPeople = people.filter(function(p){
    return p.length <= 4);
});

console.log(people);
console.log(shortPeople);

答案 4 :(得分:0)

改用Array.prototype.filter

const filterByLength = (arr, len) => arr.filter(s => s.length <= len);

const people = ["jon", "alex", "jason", "matt"];
console.log(filterByLength(people, 4)); // ["jon", "alex", "matt"]