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

Deep Merging Non Matching Array of Javascript Objects

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

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 的合并只有在对象匹配时才会起作用。有没有一种优雅的方法来合并两个对象数组?我在想我需要遍历数组并建立一个通用数组。如果为每个对象创建一个唯一标识符使匹配更容易。

如果您愿意使用 Lodash 库(或下划线),它会让您的生活更轻松(一般而言),它与 Angular 一起使用也很不错。

您可以通过使用 Lodash 执行以下操作来实现您的需求:

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