Javascript 合并具有相同键的2个对象,值来自2个数组
我想合并具有相同键的2个对象,2个数组中的值,如下所示:Javascript 合并具有相同键的2个对象,值来自2个数组,javascript,arrays,node.js,object,lodash,Javascript,Arrays,Node.js,Object,Lodash,我想合并具有相同键的2个对象,2个数组中的值,如下所示: var arr1 = [ { a: "a", 1: 1, 2: 2 }, { a: "b", 1: 1, 2: 3 } ]; var arr2 = [ { a: "a", 3: 123 }, { a: "b", 3: 4411 } ]; var arr3 = _.map(arr1, function(a1) { var a3 = {}; _.map(arr2, function(a2)
var arr1 = [
{ a: "a", 1: 1, 2: 2 },
{ a: "b", 1: 1, 2: 3 }
];
var arr2 = [
{ a: "a", 3: 123 },
{ a: "b", 3: 4411 }
];
var arr3 = _.map(arr1, function(a1) {
var a3 = {};
_.map(arr2, function(a2) {
if (a1.a == a2.a) {
a3 = _.extend(a1, a2);
}
})
return a3
});
结果:
arr3 = [
{ '1': 1, '2': 2, '3': 123, a: 'a' },
{ '1': 1, '2': 3, '3': 4411, a: 'b' }
]
它看起来愚蠢吗?还有其他的方法吗?
谢谢阅读。你可以
var arr1=[
{a:“a”,1:1,2:2},
{a:“b”,1:1,2:3}
];
var arr2=[
{a:“a”,3:123},
{a:“b”,3:4411}
];
让结果=arr1.map((e)=>{
for(arr2的let元素){
if(e.a==element.a)Object.assign(e,element);
}
返回e;
});
控制台日志(结果)代码>使用lodash链连接到阵列、类似对象,然后将每组连接到单个对象:
vararr1=[{a:a,1:1,2:2},{a:b,1:1,2:3}];
var arr2=[{a:“a”,3:123},{a:“b”,3:4411}];
var结果=U1(arr1)
.concat(arr2)//concat第二个数组
.groupBy('a')//按相同的键分组
.map(0.spread(0.curry(0.merge,{}))//左currey merge to创建一个新的空对象,并将组作为参数展开
.value();
控制台日志(结果)代码>
您的解决方案是否有效?问题是什么?它有效,但我认为有其他更好的方法可以使用某些库来实现这一点。(我还没有测试大数组长度)发帖时请更具体一些。例如,提及您使用的JavaScript库。它将帮助人们调查您使用的类似类型的库。什么是相同的密钥?相同的索引或相同的键a
?Lodash way可能存在重复。但是ES6版本不起作用。@Ajinkya-您试过运行这些代码段吗?如果是,你用的是什么浏览器?我的错。我没有替换es6代码段的属性“a”。两个代码段都正常工作。考虑到性能,你建议使用哪一种?@Ajinkya-我真的不知道该告诉你真相。如果物品的数量很小,这其实并不重要。如果数量巨大,您应该使用lodash,因为散布不安全。你需要对它进行分析。