2013-09-23 7 views
1

У меня есть массив объектов:Javascript: Удалить элемент из массива объектов

var items = [{ id: 1, text: "test1" }, { id: 2, text: "test2" }, { id: 3, text: "test3"}]; 

У меня есть следующий объект:

var itemToRemove = { id: 2, text: "test2" }; 

Я хочу, чтобы проверить по идентификатору, если itemToRemove существует массив items.

И удалить его:

// pseudo code 
    items.remove(itemToRemove); 

Я прошел через яваскрипт методу массива, но не нашел ничего, что будет делать эту работу. Благодаря!

+0

Возможный дубликат [Как удалить элемент из массива по значению?] (Https://stackoverflow.com/questions/3954438/how-to-remove-item-from-array-by-value) – pscl

ответ

2

траверс массива, используя простой цикл, а затем удалить элемент согласования с помощью splice():

for(var i=0; i<items.length; i++) { 
    if(items[i].id == itemToRemove.id) { 
    items.splice(i, 1); // remove the item 
    break; // finish the loop, as we already found the item 
    } 
} 
2

Использование filter:

items.filter(function (item) { 
    return item.id !== 2 || item.text !== "text2"; 
}); 

Это вообще не очень хорошая идея, чтобы мутировать исходный массив или я бы порекомендовал ответ Сирко. Метод filter создает целый новый массив. Он не мутирует исходный массив.

+0

+1, но это не будет работать в дрянных (т. е. IE <9) браузерах. Вам нужно будет использовать какую-то прокладку, чтобы [добавить метод фильтра] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter) в массив объект. – Robusto

+0

@Robusto 'if (! []. Filter) Array.prototype.filter = function (callback, that) {var index = 0, length = this.length, list = []; while (index

Смежные вопросы