Как удалить элемент в списке, используя forEach?
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.
Ответы
Ответ 1
Вы не должны изменять массив, на котором вы зацикливаетесь. Вы можете произвести новый, хотя:
var newPeople = [];
people.forEach(function(p){
if(p.length <= 4){
newPeople.push(p);
}
});
Почему вы не должны изменять массив, который вы зацикливаете.
Ответ 2
Используйте правильные инструменты для правильной работы. В этом случае:
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;
});
Преимущество последних двух заключается в том, что ваш код становится более читабельным.
Ответ 3
ForEach, поскольку ES5 можно использовать вместе с индексом:
data.forEach(function (element, index) {
if (element % 2 == 0) {
data.splice(index, 1);
}
});
Ответ 4
Вы можете сделать это очень легко с помощью filter()
:
var people = ['alex','jason','matt'];
var shortPeople = people.filter(function(p){
return p.length <= 4);
});
console.log(people);
console.log(shortPeople);