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循环从列表中删除一个元素。
答案 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;
});
或实用程序函数库,例如lodash或underscore,它提供了从数组中删除元素的功能:
_.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)
const filterByLength = (arr, len) => arr.filter(s => s.length <= len);
const people = ["jon", "alex", "jason", "matt"];
console.log(filterByLength(people, 4)); // ["jon", "alex", "matt"]