Javascript 如何使用lodash按键合并两个不同大小的对象数组

Javascript 如何使用lodash按键合并两个不同大小的对象数组,javascript,merge,lodash,Javascript,Merge,Lodash,我有一个对象数组,比如 var data = {"part1": [{"id": 1, "a": 50},{"id": 2, "a": 55},{"id": 4, "a": 100}], "part2":[{"id": 1, "b": 40}, {"id": 3, "b": 45}, {"id": 4, "b": 110}] }; 我需要合并第1部分和第2部分(最好使用lodash)以获得 注意:我需要根据id进行合并,如果id存在,则复制其他对象

我有一个对象数组,比如

var data = {"part1": [{"id": 1, "a": 50},{"id": 2, "a": 55},{"id": 4, "a": 100}],
            "part2":[{"id": 1, "b": 40}, {"id": 3, "b": 45}, {"id": 4, "b": 110}]
           };
我需要合并第1部分和第2部分(最好使用lodash)以获得

注意:我需要根据id进行合并,如果id存在,则复制其他对象。part1和part2的大小和顺序会有所不同,它们也可能没有任何公共id。

试试这个

var data={“part1”:[{“id”:1,“a”:50},{“id”:2,“a”:55},{“id”:4,“a”:100}],
“第二部分”:[{“id”:1,“b”:40},{“id”:3,“b”:45},{“id”:4,“b”:110}]
};
var finalArr=[];
//正在收集具有公共ID的所有项目
对于(变量i=0;i//finalArr是您想要的结果
您可以对给定对象的所有键使用动态方法,并将所有属性合并到具有相同
id的对象中。稍后对数组进行排序

var data={part1:[{id:1,a:50},{id:2,a:55},{id:4,a:100}],part2:[{id:1,b:40},{id:3,b:45},{id:4,b:110},
结果=Object.keys(数据).reduce(函数(散列){
返回函数(r,k){
数据[k].forEach(函数(o){
如果(!哈希[o.id]){
散列[o.id]={};
r、 push(散列[o.id]);
}
对象。键(o)。forEach(函数(l){
散列[o.id][l]=o[l];
});
});
返回r;
};
}(Object.create(null)),[]);
sort(函数(a,b){返回a.id-b.id;});
控制台日志(结果)
.as console wrapper{max height:100%!important;top:0;}
您可以使用lodash并将具有相同属性(本例中为id)的多个对象合并为一个对象:

var数据={“part1”:[{“id”:1,“a”:50},{“id”:2,“a”:55},{“id”:4,“a”:100}],“part2”:[{“id”:1,“b”:40},{“id”:3,“b”:45},{“id”:4,“b”:110}};
var结果=(数据)
.values()//从对象中提取数组
.flant()//将它们展平到单个数组
.groupBy('id')//根据id对它们进行分组
.map(函数(值){//映射组
return u.merge.apply(u,[{}].concat(values));//合并组中的所有元素。我正在使用apply合并对象数组,并添加一个空对象,这样原始对象就不会发生变化
})
.value();//完成链条
控制台日志(结果)

你有没有试过阅读文档并用谷歌搜索,因为我马上就找到了。
var result = [
              {"id": 1, "a": 50, "b": 40},
              {"id": 2, "a": 55},
              {"id": 3, "b": 45},
              {"id": 4, "a": 100, "b": 110}
             ];