[英]JavaScript Delete an element in an array of objects by property
我有一個形式為的對象數組
[
{prop1: value1,
banks:[{_id:value,property2:value2}]
}]
所以我想要做的是通過搜索“_id”值來刪除“banks”屬性中的一個元素,然后從banks數組中刪除找到的元素
“_id”屬性具有唯一值,因此不會多次出現任何值
我正在這樣做
$scope.account.banks.splice($scope.account.banks.indexOf(item),1);
有沒有更好的方法來做到這一點?
如果可能,更好的方法是將 bank 數組轉換為 Map,這樣您就不需要循環遍歷該數組,這可能無法很好地擴展:
var m = new Map()
for(var bank of account.banks)
m.set(bank._id, bank)
account.banks = m
然后你可以直接通過 id 刪除項目:
account.banks.delete(id)
或者甚至用一個普通的對象來做。 這樣它就不會破壞你的 Angular 代碼:
var m = {}
for(var bank of account.banks)
m[bank._id] = bank
account.banks = m
…
delete account.banks[id]
您可以使用array.filter刪除匹配item
的銀行。 雖然它仍然有點冗長,但它比手動循環要干凈一些。 我做了一個小測試用例來說明我在說什么。
var accounts = [{ prop1: 'value1', banks:[{_id:0,property2:'sdfbra'}, {_id:1,property2:'qwedfg'}, {_id:2,property2:'gaasdf'}, {_id:3,property2:'asdfaa'}] }] var item = {_id:1,property2:'qwedfg'}; accounts[0].banks = accounts[0].banks.filter(function(element){ return element._id !== item._id; }); console.log (accounts[0].banks);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.