基于数组对象列表对Javascript对象进行分组
我试图找到一种基于组数组转换此对象列表的方法。我发现的棘手的部分是迭代组数组,如果有多个组,则将对象应用到多个位置 我还试图忽略任何不属于任何组织的团体。我尝试过使用reduce函数,但无法通过组数组获得迭代基于数组对象列表对Javascript对象进行分组,javascript,arrays,object,grouping,Javascript,Arrays,Object,Grouping,我试图找到一种基于组数组转换此对象列表的方法。我发现的棘手的部分是迭代组数组,如果有多个组,则将对象应用到多个位置 我还试图忽略任何不属于任何组织的团体。我尝试过使用reduce函数,但无法通过组数组获得迭代 let cars = [ { "group":[], "name": "All Makes", "code": ""
let cars =
[
{
"group":[],
"name": "All Makes",
"code": ""
},
{
"group":["Group A"],
"name": "BMW",
"code": "X821"
},
{
"group":["Group B"],
"name": "Audi",
"code": "B216"
},
{
"group":["Group B"],
"name": "Ford",
"code": "P385"
},
{
"group":["Group B", "Group C"],
"name": "Mercedes",
"code": "H801"
},
{
"group":["Group C"],
"name": "Honda",
"code": "C213"
}
]
为此:
let cars = {
"Group A": [
{
name: "BMW",
code: "X821",
}
],
"Group B": [
{
name: "Audi",
code: "B216"
},
{
name: "Ford",
code: "P385"
},
{
name: "Mercedes",
code: "H801"
}
],
"Group C":[
{
name: "Mercedes",
code: "H801"
},
{
name:"Honda",
code: "C213"
}
]
};
我已经尝试使用reduce来实现这一点,但是如果分组在多个组中,则不会复制分组
let result = cars.reduce(function(x, {group, name}){
return Object.assign(x, {[group]:(x[group] || [] ).concat({group, name})})
}, {});
任何有助于这一点的指针都将不胜感激。您可以使用。减少以循环方式遍历汽车中的每个汽车对象。对于给定汽车的每个组数组,然后可以使用.forEach将该组添加为累加器的键。如果已在累加器中设置组,则可以获取对象的分组数组,否则,可以创建新数组[]。一旦有了数组,就可以使用.concat将对象添加到数组中。由于我们在组数组上使用.forEach,因此如果对象为空,它不会将该对象添加到累积对象中,因为.forEach不会在空数组上迭代
见下例:
const cars=[{group:[],姓名:所有品牌,代码:},{group:[A组],姓名:宝马,代码:X821},{group:[B组],姓名:奥迪,代码:B216},{group:[B组],姓名:福特,代码:P385},{group:[B组,C组],姓名:本田,代码:C213};
const res=cars.reduceacc,{group,…r}=>{
group.forEachkey=>{
acc[key]=acc[key]| |[].concat{…r};//复制r,因此它是每个分组数组的不同引用
};
返回acc;
}, {};
console.logres 您可以使用.reduce在汽车中的每个汽车对象之间循环。对于给定汽车的每个组数组,然后可以使用.forEach将该组添加为累加器的键。如果已在累加器中设置组,则可以获取对象的分组数组,否则,可以创建新数组[]。一旦有了数组,就可以使用.concat将对象添加到数组中。由于我们在组数组上使用.forEach,因此如果对象为空,它不会将该对象添加到累积对象中,因为.forEach不会在空数组上迭代
见下例:
const cars=[{group:[],姓名:所有品牌,代码:},{group:[A组],姓名:宝马,代码:X821},{group:[B组],姓名:奥迪,代码:B216},{group:[B组],姓名:福特,代码:P385},{group:[B组,C组],姓名:本田,代码:C213};
const res=cars.reduceacc,{group,…r}=>{
group.forEachkey=>{
acc[key]=acc[key]| |[].concat{…r};//复制r,因此它是每个分组数组的不同引用
};
返回acc;
}, {};
console.logres 一些基本的方法@尼克的好多了 出租汽车=[{ 组:[], 名称:一切皆有可能, 代码: }, { 组:【A组】, 姓名:宝马, 代码:X821 }, { 组:[B组], 名称:奥迪, 代码:B216 }, { 组:[B组], 姓名:福特, 代码:P385 }, { 组:[B组,C组], 姓名:梅赛德斯, 代码:H801 }, { 组:【C组】, 名称:本田, 代码:C213 } ] 让新车={}; cars.forEacho=>{ o、 group.forEachg=>{ 如果!新车[g] 新车[g]=[]; 新车[g]。推{ 姓名:o.name, 代码:o.code }; }; };
控制台。lognewCars 一些基本的方法@尼克的好多了 出租汽车=[{ 组:[], 名称:一切皆有可能, 代码: }, { 组:【A组】, 姓名:宝马, 代码:X821 }, { 组:[B组], 名称:奥迪, 代码:B216 }, { 组:[B组], 姓名:福特, 代码:P385 }, { 组:[B组,C组], 姓名:梅赛德斯, 代码:H801 }, { 组:【C组】, 名称:本田, 代码:C213 } ] 让新车={}; cars.forEacho=>{ o、 group.forEachg=>{ 如果!新车[g] 新车[g]=[]; 新车[g]。推{ 姓名:o.name, 代码:o.code }; }; }; 控制台。lognewCars;