深度合并Javascript对象的非匹配数组

时间:2016-11-28 13:27:52

标签: javascript angularjs underscore.js

我必须使用对象数组,例如:

https://plnkr.co/edit/RQs9WWs1hcxmuKGIgEhM?p=preview

我希望将它们组合在一起,这样如果一个数组元素没有出现在第二个集合中,它会被带来,如果有的话,就会添加缺少的元素。

所以我希望看到的是:

[{"car":"A","miles":100},{"car":"B","miles":100},{"car":"C","miles":100,"sold":"Y"}]

[{"car":"B","miles":100,"sold":"Y"},{"car":"C","miles":100,"sold":"Y"}]

[{"car":"A","miles":100},{"car":"B","miles":100,"sold":"Y"},{"car":"C","miles":100,"sold":"Y"}]

注意" Car A"仅存在于第一个数组中并被转移。

Angular的合并仅在对象匹配时才有效。是否有一种优雅的方式来合并两个对象数组?我以为我需要遍历数组并构建一个公共数组。如果为每个对象创建唯一标识符,则可以更轻松地进行匹配。

1 个答案:

答案 0 :(得分:0)

如果您愿意使用Lodash库(或下划线),它会让您的生活变得更轻松(一般而言),它也适用于Angular。

通过使用Lodash执行以下操作,您可以实现所需:

_.values(_.extend(_.keyBy(a, 'car'), _.keyBy(b, 'car')));