Вот одно возможное решение:
var obj1 = [
{ id:1, code:"item1", color:"blue" },
{ id:2, code:"item2", color: "white" },
{ id:3, code:"item3", color: "brown" }
]
var obj2 = [
{ id:1, code:"item1", stock: 10 },
{ id:3, code:"item1", stock: 20 },
{ id:2, code:"item2", stock: 20 }
]
var reduced = obj1.reduce((obj, next) => {
var { id, code, color } = next;
var key = id + code;
obj[key] = { id, code, color, sid: [] };
return obj;
}, {});
obj2.forEach(obj => {
var { id, code, stock } = obj;
var key = id + code;
var object = reduced[key];
if (object)
object.sid.push(stock);
});
var output = Object.values(reduced);
console.log(output);
, которое дает:
[
{ id: 1, code: 'item1', color: 'blue', sid: [ 10 ] },
{ id: 2, code: 'item2', color: 'white', sid: [ 20 ] },
{ id: 3, code: 'item3', color: 'brown', sid: [] }
]