Javascript 合并具有不同ID的多个对象数组

Javascript 合并具有不同ID的多个对象数组,javascript,jquery,arrays,Javascript,Jquery,Arrays,我需要通过公共ID合并多个json对象。我的问题是,我的对象具有不同的ID键 var object1 = [ { "name":"apples" ,"w": 1, "x": 2 }, { "name":"banana" ,"w": 1, "x": 2 }, { "name":"cherry" ,"w": 1, "x": 2 }, ]; var object2 = [ { "type":"banana" ,"y": 3, "x": 4 }, { "type":"cherry"

我需要通过公共ID合并多个json对象。我的问题是,我的对象具有不同的ID键

var object1 = [
  { "name":"apples" ,"w": 1, "x": 2 },
  { "name":"banana" ,"w": 1, "x": 2 },
  { "name":"cherry" ,"w": 1, "x": 2 },
];
var object2 = [
  { "type":"banana" ,"y": 3, "x": 4 },
  { "type":"cherry" ,"y": 3, "x": 4 },
];
我想获得:

var object1 = [
  { "name":"apples" ,"w": 1, "x": 2 },
  { "name":"banana" ,"w": 1, "x": 4, "y": 3 },
  { "name":"cherry" ,"w": 1, "x": 4, "y": 3 },
];
我想使用相同的数组[object1],而不是创建一个新数组。
我通过
object2
创建了一个循环,并使用更新了结果-请参见下面的演示:

var object1=[{“name”:“apples”,“w”:1,“x”:2},{“name”:“banana”,“w”:1,“x”:2},{“name”:“cherry”,“w”:1,“x”:2}];
var object2=[{“type”:“banana”,“y”:3,“x”:4},{“type”:“cherry”,“y”:3,“x”:4}];
object2.forEach(函数(e){
var found=object1.find(函数(k){
返回k.name==e.type;
});
如果(找到){
发现。x=e.x;
y=e.y;
}
});
console.log(object1)
.as console wrapper{top:0;max height:100%!important;}
您可以使用
reduce()
创建新数组,并查找以检查
object2
对象中是否存在相同类型的同名对象

var object1=[
{“名称”:“苹果”,“w”:1,“x”:2},
{“名称”:“香蕉”,“w”:1,“x”:2},
{“name”:“cherry”,“w”:1,“x”:2},
];
var object2=[
{“类型”:“香蕉”,“y”:3,“x”:4},
{“类型”:“樱桃”,“y”:3,“x”:4},
];
var result=object1.reduce(函数(r,e){
var o=object2.find(a=>e.name==a.type);
r、 push(o?Object.assign({},e,{x:o.x,y:o.y}):e);
返回r;
}, [])

console.log(result)
我为您的问题制定了解决方案,您能试试吗

var object1=[
{“名称”:“苹果”,“w”:1,“x”:2},
{“名称”:“香蕉”,“w”:1,“x”:2},
{“name”:“cherry”,“w”:1,“x”:2},
];
var object2=[
{“类型”:“香蕉”,“y”:3,“x”:4},
{“类型”:“樱桃”,“y”:3,“x”:4},
];
函数合并对象(obj1、obj2){
var obj3={};
对于(obj1中的var attrname){obj3[attrname]=obj1[attrname];}
对于(obj2中的var attrname){obj3[attrname]=obj2[attrname];}
返回obj3;
}
函数mergeObjectInArray(firstArray,firstArrayKey,secondaryArray,secondaryArrayKey){
var resultArray=新数组();
for(firstArray中的var firstArrayIndex){
var firstArrayObject=firstArray[firstArrayIndex];
var resultarayobject=firstArrayObject;
for(辅数组中的var辅数组索引){
var secondaryArrayObject=secondaryArray[secondaryArrayIndex];
if(firstArrayObject[firstArrayKey]==secondaryArrayObject[secondaryArrayKey]){
结果rayObject=mergeObject(第一个ArrayObject,第二个ArrayObject);
删除resultArrayObject[secondaryArrayKey];
}
}
resultArray.push(resultArrayObject);
}
返回结果数组;
}
var resultArray=mergeObjectInArray(object1,“名称”,object2,“类型”);

//假设JSON.stringify-在IE中不可用,那么如果第二个
object2
包含像
{“type”:“lime”,“y”:2,“x”:4}
?在这种情况下会有什么结果?可能是重复的嘿,你的解决方案工作得很好,我现在遇到的问题是ie不能解决的。发现你知道如何克服吗?