Javascript 通过公共对象键合并多个对象数组

Javascript 通过公共对象键合并多个对象数组,javascript,arrays,underscore.js,Javascript,Arrays,Underscore.js,我有一个问题,我希望你们这些关于堆栈溢出的JavaScript人员能帮我解决这个问题 给定以下数组: var array1 = [{address: "www.example.com", hits: 1}, {address: "www.anotherone.org", hits: 10}] var array2 = [{address: "www.example.com", buttons: 1}, {address: "www.yetanotherone.info", buttons: 2}

我有一个问题,我希望你们这些关于堆栈溢出的JavaScript人员能帮我解决这个问题

给定以下数组:

var array1 = [{address: "www.example.com", hits: 1}, {address: "www.anotherone.org", hits: 10}]
var array2 = [{address: "www.example.com", buttons: 1}, {address: "www.yetanotherone.info", buttons: 2}]
var array3 = [{address: "www.example.com", cons: 1}, {address: "andevenonemore.com", cons: 1}]
我想通过地址键合并这些数组,地址键在所有数组中都是通用的,但值可能不同。如果地址值不在数组中,则默认值应为0。 因此,结果数组应该如下所示:

var resultArray = [{
  address: "www.example.com",
  hits: 1,
  buttons: 1,
  cons: 1
}, {
  address: "www.anotherone.org",
  hits: 1,
  buttons: 0,
  cons: 0
}, {
  address: "www.yetanotherone.info",
  hits: 0,
  buttons: 2,
  cons: 0
}, {
  address: "andevenonemore.com",
  hits: 0,
  buttons: 0,
  cons: 1
}]
合并将在服务器上进行,我可以使用underline.js


我真的希望,比我聪明得多的人能给我一个有效的方法来解决这个问题。非常感谢你的帮助

在纯Javascript中,可以使用哈希表引用单个地址项,并计算所需的值

var array1=[{地址:“www.example.com”,点击:1},{地址:“www.anotherone.org”,点击:10}],
array2=[{地址:“www.example.com”,按钮:1},{地址:“www.yetanotherone.info”,按钮:2}],
array3=[{地址:“www.example.com”,cons:1},{地址:“andevennemore.com”,cons:1}],
分组=[];
[]concat(array1,array2,array3).forEach(函数(a){
如果(!此[a.地址]){
这个[a.address]={address:a.address,点击:0,按钮:0,cons:0};
分组。推送(此[a.地址]);
}
Object.keys(a).forEach(函数(k){
如果(k!=“地址”){
这个[a.地址][k]+=a[k];
}
},这个);
},Object.create(null));

控制台日志(分组)我知道已经有一个公认的答案,但这里有一个使用下划线的答案。它首先按地址分组,然后用组中的每个对象扩展起始对象

var data = [].concat(array1, array2, array3);

var extendArray = function(arr){
   return _.reduce(arr, (memo,val) => _.extend(memo, val), {hits: 0, buttons: 0, cons: 0});
}

var resultArray = _.chain(data)
   .groupBy('address')
   .map(extendArray)
   .value()

我觉得我刚离开。粗声粗气,没关系!非常感谢,有其他选择总是好的。您知道下划线在性能方面与普通解决方案相比如何吗?下划线是用js编写的,定制的javascript通常会更快。然而,下划线格式的解决方案通常更能表达您试图实现的目标,并得到大量测试的支持。