在javascript中通过基于匹配键添加键值创建数组对象

在javascript中通过基于匹配键添加键值创建数组对象,javascript,arrays,object,Javascript,Arrays,Object,如何通过在jvascript中添加属性来创建新的对象数组 我有两个数组对象obj1和obj2 如果obj2和obj1键值code匹配,则添加键值为id的键值sid function arr(obj1, obj2){ return obj1.filter(({ code }) => obj2.find((obj) => Object.values(obj).includes(code )) ); } var obj1 = [ { id:1, code:"i

如何通过在jvascript中添加属性来创建新的对象数组

我有两个数组对象
obj1
obj2

如果
obj2
obj1
键值
code
匹配,则添加键值为id的键值
sid

function arr(obj1, obj2){
   return obj1.filter(({ code }) =>
      obj2.find((obj) => Object.values(obj).includes(code ))
    );
}
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 }
]
预期产出:

[ 
 { id:1, code:"item1", color:"blue", sid: 1,3 },
 { id:2, code:"item2", color: "white", sid: 2 }
]

以下是一个潜在的解决方案:

var obj1=[
{id:1,代码:“item1”,颜色:“blue”},
{id:2,代码:“item2”,颜色:“白色”},
{id:3,代码:“item3”,颜色:“brown”}
]
变量obj2=[
{id:1,代码:“item1”,股票:10},
{id:3,代码:“item1”,股票:20},
{id:2,代码:“item2”,库存:20}
]
var reduced=obj1.reduce((obj,下一个)=>{
var{id,code,color}=next;
var key=id+code;
obj[key]={id,code,color,sid:[]};
返回obj;
}, {});
obj2.forEach(obj=>{
var{id,code,stock}=obj;
var key=id+code;
var对象=减少的[关键点];
如果(对象)
object.sid.push(股票);
});
var输出=对象值(减少);
控制台日志(输出);
产生:

[
{id:1,代码:'item1',颜色:'blue',sid:[10]},
{id:2,代码:'item2',颜色:'white',sid:[20]},
{id:3,代码:'item3',颜色:'brown',sid:[]
]

您可以获取一个哈希表并映射新数组

var array1=[{id:1,代码:“item1”,颜色:“蓝色”},{id:2,代码:“item2”,颜色:“白色”},{id:3,代码:“item3”,颜色:“棕色”},
array2=[{id:1,代码:“item1”,股票:10},{id:3,代码:“item1”,股票:20},{id:2,代码:“item2”,股票:20}],
map=array2.reduce((r,{id,code})=>{
(r[code]=r[code]| |[]).push(id);
返回r;
}, {}),
结果=阵列1.减少((r,o)=>{
if(map[o.code])r.push({…o,sid:map[o.code].join()});
返回r;
}, []);
控制台日志(结果)

。作为控制台包装{max height:100%!important;top:0;}
您可能需要
reduce
此处:

var obj1=[{id:1,代码:“item1”,颜色:“蓝色”},{id:2,代码:“item2”,颜色:“白色”},{id:3,代码:“item2”,颜色:“棕色”}];
var obj2=[{id:1,代码:“item1”,股票:10},{id:3,代码:“item1”,股票:20},{id:2,代码:“item2”,股票:20}]
var result=Object.values([…obj1,…obj2]).reduce((acc,{code,color,id,…rest})=>{
acc[code]=acc[code]|{code,id,color,sid:[]};
if(rest.stock)acc[code].sid.push(id);
返回acc;
}map(({sid,{rest})=>({…rest,sid:sid.join(',')}));

控制台日志(结果)
sid:1,3
这是字符串还是数组?您的示例也有语法errors@evolutionxbox谢谢回复,StringBrown项目怎么了?@evolutionxbox抱歉,更新了代码