Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
386 views
in Technique[技术] by (71.8m points)

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"
    }]
}]

写不出来,求助


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
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)

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

1.4m articles

1.4m replys

5 comments

56.7k users

...