假设有一个对象数组,每个对象包含一个分组名称和各个子项,要将这些对象按照分组名称和子项进行分组,可以使用reduce和对象的key来实现:
const data = [
{ group: 'A', children: ['a1', 'a2', 'a3'] },
{ group: 'B', children: ['b1', 'b2', 'b3'] },
{ group: 'A', children: ['a4', 'a5'] },
{ group: 'C', children: ['c1', 'c2', 'c3'] },
{ group: 'B', children: ['b4', 'b5', 'b6'] },
];
const result = data.reduce((acc, item) => {
// 如果当前分组名称不存在,则添加该分组
if (!acc[item.group]) {
acc[item.group] = {};
}
// 将当前子项加入对应的分组中
item.children.forEach(child => {
if (!acc[item.group][child]) {
acc[item.group][child] = [];
}
acc[item.group][child].push(item);
});
return acc;
}, {});
console.log(result);
// 输出结果:
// {
// "A": {
// "a1": [
// {
// "group": "A",
// "children": [
// "a1",
// "a2",
// "a3"
// ]
// }
// ],
// "a2": [
// {
// "group": "A",
// "children": [
// "a1",
// "a2",
// "a3"
// ]
// }
// ],
// "a3": [
// {
// "group": "A",
// "children": [
// "a1",
// "a2",
// "a3"
// ]
// }
// ],
// "a4": [
// {
// "group": "A",
// "children": [
// "a4",
// "a5"
// ]
// }
// ],
// "a5": [
// {
// "group": "A",
// "children": [
// "a4",
// "a5"
// ]
// }
// ]
// },
// "B": {
// "b1": [
// {
// "group": "B",
// "children": [
// "b1",
//