繁体   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