Удалить элемент из массива с помощью UnderscoreJS
Скажем, у меня есть этот код
var arr = [{id:1,name:'a'},{id:2,name:'b'},{id:3,name:'c'}];
и я хочу удалить элемент с id = 3 из массива. Есть ли способ сделать это без сращивания? Майе что-то с помощью подчеркивания или что-то в этом роде?
Спасибо!
Ответы
Ответ 1
Просто используя простой JavaScript, на это уже был дан ответ: удалить объекты из массива по свойству объекта.
Используя underscore.js, вы можете комбинировать .findWhere
с .without
:
var arr = [{
id: 1,
name: 'a'
}, {
id: 2,
name: 'b'
}, {
id: 3,
name: 'c'
}];
//substract third
arr = _.without(arr, _.findWhere(arr, {
id: 3
}));
console.log(arr);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
Ответ 2
Вы можете использовать Underscore .filter
var arr = [{
id: 1,
name: 'a'
}, {
id: 2,
name: 'b'
}, {
id: 3,
name: 'c'
}];
var filtered = _(arr).filter(function(item) {
return item.id !== 3
});
Также может быть записан как:
var filtered = arr.filter(function(item) {
return item.id !== 3
});
var filtered = _.filter(arr, function(item) {
return item.id !== 3
});
Проверить скрипт
Вы также можете использовать .reject
Ответ 3
Использовать Underscore _.reject()
:
arr = _.reject(arr, function(d){ return d.id === 3; });
Ответ 4
Underscore имеет метод _without(), который идеально подходит для удаления элемента из массива, особенно если у вас есть объект для удаления.
Возвращает копию массива со всеми экземплярами удаленных значений.
_.without(["bob", "sam", "fred"], "sam");
=> ["bob", "fred"]
Работает с более сложными объектами.
var bob = { Name: "Bob", Age: 35 };
var sam = { Name: "Sam", Age: 19 };
var fred = { Name: "Fred", Age: 50 };
var people = [bob, sam, fred]
_.without(people, sam);
=> [{ Name: "Bob", Age: 35 }, { Name: "Fred", Age: 50 }];
Если у вас нет элемента для удаления, просто его свойство, вы можете использовать _.findWhere
, а затем _.without
.
Ответ 5
Будьте внимательны, если вы фильтруете строки и ищете фильтры, нечувствительные к регистру. _.without() чувствителен к регистру. Вы также можете использовать _.reject(), как показано ниже.
var arr = ["test","test1","test2"];
var filtered = _.filter(arr, function(arrItem) {
return arrItem.toLowerCase() !== "TEST".toLowerCase();
});
console.log(filtered);
// ["test1", "test2"]
var filtered1 = _.without(arr,"TEST");
console.log(filtered1);
// ["test", "test1", "test2"]
var filtered2 = _.reject(arr, function(arrItem){
return arrItem.toLowerCase() === "TEST".toLowerCase();
});
console.log(filtered2);
// ["test1", "test2"]
Ответ 6
arr.splice(_.findIndex(arr, { id: 3 }), 1);
Ответ 7
или другой удобный способ:
_.omit(arr, _.findWhere(arr, {id: 3}));
мои 2 цента
Ответ 8
Я использовал этот метод
_.filter(data, function(d) { return d.name != 'a' });
Там могут быть и более эффективные методы, подобные вышеупомянутым решениям, предоставляемым пользователями
Ответ 9
Вы можете использовать метод отклонения Underscore, ниже будет возвращен новый массив, у которого не будет массив с определенным соответствием
arr = _.reject(arr, function(objArr){ return objArr.id == 3; });