js数组对象合并的问题

这是原始数据

const school = [{
    classes: "1班",
    code: "0201002",
    id: "5eeb252c391f14b9ce72c75d",
    system: "安卓"
},
{
    classes: "1班",
    code: "0201002",
    id: "5eeb252c391f14b9ce72c75d",
    system: "安卓"
},
{
    classes: "2班",
  code: "0201002",
  id: "5eeb252c391f14b9ce72c75d",
  system: "安卓"
},
{
    classes: "3班",
    code: "0201002",
    id: "5eeb252c391f14b9ce72c75d",
    system: "IOS"
}]

问题:
// 1,先根据相同的system进行合并,合并之后如下

[{
    system: '安卓',
    children: [{
        classes: "1班",
        code: "0201002",
        id: "5eeb252c391f14b9ce72c75d",
        system: "安卓"
    },
    {
        classes: "1班",
        code: "0201002",
        id: "5eeb252c391f14b9ce72c75d",
        system: "安卓"
    },{
        classes: "2班",
        code: "0201002",
        id: "5eeb252c391f14b9ce72c75d",
        system: "安卓"
    }]
},{
   system: 'IOS',
   children: [{
        classes: "3班",
        code: "0201002",
        id: "5eeb252c391f14b9ce72c75d",
        system: "IOS"
    }]
}]

// 2,再根据system下的children不同classse合并,最终是这样的

[{
    system: '安卓',
    children: [{
        classes: "1班",
        children: [{
            classes: "1班",
            code: "0201002",
            id: "5eeb252c391f14b9ce72c75d",
            system: "安卓"
        }, {
            classes: "1班",
            code: "0201002",
            id: "5eeb252c391f14b9ce72c75d",
            system: "安卓"
        }]
    },
    {
        classes: "2班",
        children: [{
            classes: "2班",
            code: "0201002",
            id: "5eeb252c391f14b9ce72c75d",
            system: "安卓"
        }]
    }]
},
{
   system: 'IOS',
   children: [{
        classes: "3班",
        code: "0201002",
        id: "5eeb252c391f14b9ce72c75d",
        system: "IOS"
    }]
}]

写不出来,求助

阅读 2.1k
1 个回答
let obj = Object.create(null)
school.forEach(item => {
    if(!obj[item.system]){
        obj[item.system] = Object.create(null)
    }
    if(!obj[item.system][item.classes]){
        obj[item.system][item.classes] = []
    }
    obj[item.system][item.classes].push(item)
})
console.log(obj)
let result = []
for(let system in obj){
    let children = []
    for(let classes in obj[system]){
        //结果是可能和原本的顺序不同,有需要可以在这里排序
        //obj[system][classes].sort((a, b) => a.code- b.code)
        children.push({
            classes: classes,
            children: obj[system][classes]
        })
    }
    
    result.push({
        system: system,
        children: children
    })
}
console.log(result)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题