我有一个像下面这样的列表:
var list = [
{
id:1,
name: 'bss',
type_a: 1,
},
{
id:2,
name: 'bss',
type_a: 1,
},
{
id:3,
name: 'bss',
type_a: 2,
},
{
id:4,
name: 'bss',
type_a: 2,
},
{
id:6,
name: 'bss',
type_a: 2,
},
{
id:8,
name: 'bss',
type_a: 5,
},
{
id:9,
name: 'bss',
type_a: 8,
},
...
]
您看到列表,列表中的项目具有type_a
参数:
我想提取type_a
,并聚合相同的type_a,如下所示:
{
8: [ // the 8 is `type_a`
{
id:9,
name: 'bss',
type_a: 8,
},
],
},
5: [
{
id:8,
name: 'bss',
type_a: 5,
},
]
...
}
是否有更有效的功能来实现这一目标?
我可以使用两个for循环来实现这一点,第一个是搜集type_a类型,另一个是列表(如果等于type_a
项)。
答案 0 :(得分:0)
您可以将Array.reduce()
用于该输出:
var list = [
{
id:1,
name: 'bss',
type_a: 1,
},
{
id:2,
name: 'bss',
type_a: 1,
},
{
id:3,
name: 'bss',
type_a: 2,
},
{
id:4,
name: 'bss',
type_a: 2,
},
{
id:6,
name: 'bss',
type_a: 2,
},
{
id:8,
name: 'bss',
type_a: 5,
},
{
id:9,
name: 'bss',
type_a: 8,
}
];
var res = list.reduce((acc, item)=>{
if(acc[item.type_a]){
acc[item.type_a].push(item);
return acc;
}
acc[item.type_a] = [];
acc[item.type_a].push(item);
return acc;
}, {});
console.log(res);