JavaScript按属性

时间:2015-09-25 13:13:00

标签: javascript arrays

我有一个

形式的对象数组
[  
   {prop1: value1,
   banks:[{_id:value,property2:value2}]
}]

所以我想做的是通过搜索“_id”值删除“banks”属性中的元素,然后从banks数组中删除找到的元素

“_ id”属性具有唯一值,因此不会出现任何值的多次

我这样做

$scope.account.banks.splice($scope.account.banks.indexOf(item),1);

有没有更好的方法呢?

2 个答案:

答案 0 :(得分: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]

答案 1 :(得分:1)

您可以使用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);