javascript – 如何唯一地合并两个对象数组?

我试图合并两个对象数组,而不使用lodash中的unionBy方法.

目前我有以下代码完美地工作:

var array1 = [
 { a: 1, b: 'first'},
 { a: 2, b: 'second'}
];

var array2 = [
 { a: 3, b: 'third'},
 { a: 1, b: 'fourth'}
];

var array3 = __.unionBy(array2, array1, 'a');

这输出:

[
  {
    "a": 3,
    "b": "third"
  },
  {
    "a": 1,
    "b": "fourth"
  },
  {
    "a": 2,
    "b": "second"
  }
]

这是期望的结果,但我不能在我当前的工作环境中使用unionBy,所以我正在寻找使用本机JS或其他lodash方法3.6.0或更低版本的结果.

解决方法:

Concat并使用Array#filter与辅助对象删除重复项:

var array1 = [{"a":1,"b":"first"},{"a":2,"b":"second"}];

var array2 = [{"a":3,"b":"third"},{"a":1,"b":"fourth"}];

var result = array2.concat(array1).filter(function(o) {  
  return this[o.a] ? false : this[o.a] = true;
}, {});

console.log(result);

如果ES6是一个选项,您可以使用Set而不是辅助对象:

const array1 = [{"a":1,"b":"first"},{"a":2,"b":"second"}];

const array2 = [{"a":3,"b":"third"},{"a":1,"b":"fourth"}];

const result = array2.concat(array1).filter(function(o) {  
  return this.has(o.a) ? false : this.add(o.a);
}, new Set());

console.log(result);
上一篇:javascript – Lodash中的partialRight似乎什么都不做


下一篇:在javascript中将数组与对象键和组进行比较