【问题标题】:Compare to arrays of objects and update key in Angular与 Angular 中的对象数组和更新键进行比较
【发布时间】:2016-11-09 15:42:18
【问题描述】:

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

$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?

【问题讨论】:

  • 所以你想比较listone和listtwo,因为id:2都存在,输出应该是listone[2].selected=true?
  • 请告诉我们什么对您有用
  • @geeky 我不是在寻找新的输出,只是在 listTwo 中存在相同 id 时更新 listOne 的 selected 属性

标签: javascript angularjs arrays


【解决方案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>

希望对你有帮助

【讨论】:

  • 不错的解决方案,如何将它与 angular.forEach 一起使用?
【解决方案2】:

我首先想到的是使用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')。

【讨论】:

  • 不错的提示,但我希望保持数组完整并且只更新选定的属性。
【解决方案3】:

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

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

Object comparison in JavaScript

【讨论】:

  • Iodash 是一个很好的建议,但如果可能的话,我宁愿不要依赖库。
【解决方案4】:

在纯 Javascript 中:

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

【讨论】:

  • 很好的建议,尝试在 angular.forEach 中使用它
猜你喜欢
  • 2018-02-06
  • 2020-10-17
  • 2021-09-28
  • 1970-01-01
  • 2016-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多