比较Angular中的对象数组和更新键

时间:2016-11-09 15:42:18

标签: javascript angularjs arrays

如果两个数组中都存在对象,我如何比较两个对象数组并更新一个键?

$scope.listOne = [
  {id: 1, selected: false},
  {id: 2, selected: false},
  {id: 3, selected: false}
];

$scope.listTwo = [
  {id: 4, color: orange},
  {id: 5, color: blue},
  {id: 2, color: green}
];

使用上述对象,我如何比较它们并将listOne [1] .selected更新为true?

4 个答案:

答案 0 :(得分:1)

在这里,我试图遍历listone并检查listtwo中是否有这样的键,如果是这样,将listone的selected属性设置为true

这是在vanila javascript中完成的



var listOne = [{
  id: 1,
  selected: false
}, {
  id: 2,
  selected: false
}, {
  id: 3,
  selected: false
}];

var listTwo = [{
  id: 4,
  color: "orange"
}, {
  id: 5,
  color: "blue"
}, {
  id: 2,
  color: "green"
}];



angular.forEach(listOne, function(value) {
  for (var key in listTwo) {
    if (listTwo[key]["id"] == value.id) {
      value.selected = true;
    }
  }
});
console.log(listOne);

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
&#13;
&#13;
&#13;

希望这有帮助

答案 1 :(得分:0)

我首先想到的是使用lodash函数:

let a = [{ id: 1, selected: false }];
let b = [{ id: 1, selected: false }, { id: 2, selected: true }];
let result = _.intersectionWith(a, b, _.isEqual);

'result'应该是一个包含一个元素的数组,该部分匹配(即。,'a')。

答案 2 :(得分:0)

查看lodash _.some(https://lodash.com/docs/4.16.6#some

否则你可以循环遍历数组,JSON.stringify每个对象,并像这样答案检查是否相等:

Object comparison in JavaScript

答案 3 :(得分:0)

只是简单的Javascript:

$scope.listOne.filter(function(item) {
    return !!$scope.listTwo.find(function(innerItem) {
        innerItem.id == item.id;
    });
})
.forEach(function(item) {
    item.selected = true;
});