基于一个唯一的 属性 对对象数组进行分组?
Group array of object base on one unique property?
例如,如何将如下所示的对象数组转换为名称按id分组的相应结果?我想使用 vanilla Javascript 并且尽可能不使用像 lodash 这样的外部库来做到这一点。
示例数组:
const items = [
{ id: 1, name: 'a' },
{ id: 2, name: 'b' },
{ id: 3, name: 'c' },
{ id: 1, name: 'd' },
{ id: 3, name: 'f' },
{ id: 1, name: 'a' },
{ id: 3, name: 'c' },
];
预期结果:
const result = [
{ id: 1, names: ['a', 'd']},
{ id: 2, names: ['b']},
{ id: 3, names: ['c', 'f']}
]
我在数组上执行 reduce
,它给了我一个
形式的对象
{
1: [object Set] { ... },
2: [object Set] { ... },
3: [object Set] { ... }
}
其中 Set
仅用于保留唯一值。
之后,我 运行 map
Object.entries
将数据转换为您想要的格式。
const items = [{ id: 1, name: 'a' },{ id: 2, name: 'b' },{ id: 3, name: 'c' },{ id: 1, name: 'd' },{ id: 3, name: 'f' },{ id: 1, name: 'a' },{ id: 3, name: 'c' },];
const a = items.reduce((acc,curr)=> {
if(!acc[curr.id]){
acc[curr.id] = new Set();
}
acc[curr.id].add(curr.name)
return acc;
},{})
let result = Object.entries(a).map((el) => ({id: el[0],names:[...el[1]]}))
console.log(result)
.as-console-wrapper { max-height: 100% !important; top: 0; }
例如,如何将如下所示的对象数组转换为名称按id分组的相应结果?我想使用 vanilla Javascript 并且尽可能不使用像 lodash 这样的外部库来做到这一点。
示例数组:
const items = [
{ id: 1, name: 'a' },
{ id: 2, name: 'b' },
{ id: 3, name: 'c' },
{ id: 1, name: 'd' },
{ id: 3, name: 'f' },
{ id: 1, name: 'a' },
{ id: 3, name: 'c' },
];
预期结果:
const result = [
{ id: 1, names: ['a', 'd']},
{ id: 2, names: ['b']},
{ id: 3, names: ['c', 'f']}
]
我在数组上执行 reduce
,它给了我一个
{
1: [object Set] { ... },
2: [object Set] { ... },
3: [object Set] { ... }
}
其中 Set
仅用于保留唯一值。
之后,我 运行 map
Object.entries
将数据转换为您想要的格式。
const items = [{ id: 1, name: 'a' },{ id: 2, name: 'b' },{ id: 3, name: 'c' },{ id: 1, name: 'd' },{ id: 3, name: 'f' },{ id: 1, name: 'a' },{ id: 3, name: 'c' },];
const a = items.reduce((acc,curr)=> {
if(!acc[curr.id]){
acc[curr.id] = new Set();
}
acc[curr.id].add(curr.name)
return acc;
},{})
let result = Object.entries(a).map((el) => ({id: el[0],names:[...el[1]]}))
console.log(result)
.as-console-wrapper { max-height: 100% !important; top: 0; }