簡體   English   中英

JavaScript 按屬性刪除對象數組中的元素

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM