Javascript 从其他两个阵列创建阵列

Javascript 从其他两个阵列创建阵列,javascript,arrays,object,Javascript,Arrays,Object,我有两个对象数组,如下所示: 类别=[ {name:“performance”,id:1}, {姓名:“理解”,id:2} ] 查询=[ {名称:“A”,类别:“1”}, {名称:“B”,类别:“1”}, {名称:“C”,类别:“1”}, {名称:“D”,类别:“2”} ] 现在,使用这两个对象数组,我需要以下数组作为结果: 进程=[ {类别:“性能”,查询:[ {name:“A”}, {name:“B”}, {name:“C”} ]}, {类别:“理解”,查询:[{name:“D”}]}

我有两个对象数组,如下所示:

类别=[
{name:“performance”,id:1},
{姓名:“理解”,id:2}
]
查询=[
{名称:“A”,类别:“1”},
{名称:“B”,类别:“1”},
{名称:“C”,类别:“1”},
{名称:“D”,类别:“2”}
]
现在,使用这两个对象数组,我需要以下数组作为结果:

进程=[
{类别:“性能”,查询:[
{name:“A”},
{name:“B”},
{name:“C”}
]},
{类别:“理解”,查询:[{name:“D”}]}
]
我必须将
categoryId
与进程的id匹配,然后创建上面的数组。 我尝试了以下方法来解决这个问题,但没有得到预期的结果

const test=[];
类别。forEach((元素)=>{
常量r=que.filter((res)=>res.categoryId==element.id);
查询。forEach((rt)=>{
if(rt.categoryId==element.id){
测试推送({
类别:element.name,
查询:[{
名称:rt.name,
}],
});
}
});
});
在JavaScript中使用任何内置的数组方法都可以做到这一点吗? 提前感谢

  • 使用
    Array.reduce
    ,您可以按
    categoryId
    查询进行分组
  • 基于groupedBy对象,使用
    Array.map
    ,您可以得到想要的结果
常量类别=[{
名称:“性能”,
id:“1”
},{
名称:“理解”,
id:“2”
}];
常量查询=[{
名称:“A”,
类别:“1”
}, {
名称:“B”,
类别:“1”
}, {
名称:“C”,
类别:“1”
}, {
名称:“D”,
类别:“2”
}];
const groupbyquerys=查询。reduce((acc,cur)=>{
会计科目[当前分类]?
acc[cur.categoryId].push({name:cur.name})
:acc[cur.categoryId]=[{name:cur.name}];
返回acc;
}, {});
const result=categories.map({name,id})=>({
类别:姓名,,
查询:groupByQueries[id]
}));
控制台日志(结果)
categories=[{name:“性能”,id:1},{name:“理解”,id:2}];
查询=[{name:“A”,categoryId:“1”},{name:“B”,categoryId:“1”},{name:“C”,categoryId:“1”},{name:“D”,categoryId:“2”}]
常数测试=[];
类别。forEach((元素)=>{
设温度=[]
querys.map(项=>{
if(element.id.toString()==item.categoryId)
临时推送({name:item.name})
})
test.push({category:element.name,query:temp})
});
console.log(测试)