如何根据对象属性对对象数组进行分组?

我有一个如下所示的数组:


let data:[

    {

        "class": "X",

        "student":[

            {

                "name": "Bumblebee",

                "id":"SAB77"

            }

        ]

    },

    {

        "class": "X",

        "student":[

            {

                "name": "Omega",

                "id":"SAB78"

            }

        ]

    },

    {

        "class": "IX",

        "student":[

            {

                "name": "Pluto",

                "id":"RBC17"

            }

        ]

    },

    {

        "class": "IX",

        "student":[

            {

                "name":"16 psyche",

                "id":"RBC18"

            }

        ]

    }

]


我想分组如下:



 data:[

    {

        "class": "X",

        "student":[

            {

                "name": "Bumblebee",

                "id":"SAB77"

            },

            {

                "name": "Omega",

                "id":"SAB78"

            }

        ]

    },

    {

        "class": "IX",

        "student":[

            {

                "name": "Pluto",

                "id":"RBC17"

            },

            {

                "name": "16 psyche",

                "id":"RBC18"

            }

        ]

    }

]


米脂
浏览 161回答 3
3回答

繁星coding

let data = [    {        "class": "X",        "student":[            {                "name": "Bumblebee",                "id":"SAB77"            }        ]    },    {        "class": "X",        "student":[            {                "name": "Omega",                "id":"SAB78"            }        ]    },    {        "class": "IX",        "student":[            {                "name": "Pluto",                "id":"RBC17"            }        ]    },    {        "class": "IX",        "student":[            {                "name":"16 psyche",                "id":"RBC18"            }        ]    }];const output = data.reduce((acc, rec) => { const obj = acc.find(ele => ele.class === rec.class);    if (obj) {      obj.student = [...obj.student, ...rec.student];     } else {      acc.push(rec);    }  return acc;}, []);console.log(output)

森林海

尝试这个。let data = [&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; "class": "X",&nbsp; &nbsp; &nbsp; &nbsp; "student": [&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "name": "Bumblebee",&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "id": "SAB77"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; ]&nbsp; &nbsp; },&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; "class": "X",&nbsp; &nbsp; &nbsp; &nbsp; "student": [&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "name": "Omega",&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "id": "SAB78"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; ]&nbsp; &nbsp; },&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; "class": "IX",&nbsp; &nbsp; &nbsp; &nbsp; "student": [&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "name": "Pluto",&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "id": "RBC17"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; ]&nbsp; &nbsp; },&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; "class": "IX",&nbsp; &nbsp; &nbsp; &nbsp; "student": [&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "name": "16 psyche",&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "id": "RBC18"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; ]&nbsp; &nbsp; }]var reOrganized = [];var unseen_classes = [];for (var i = 0; i < data.length; i++) {&nbsp; &nbsp; if (unseen_classes.indexOf(data[i].class) !== -1) {&nbsp; &nbsp; &nbsp; &nbsp; for (var j = 0; j < reOrganized.length; j++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (reOrganized[j].class === data[i].class) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; reOrganized[j].students.push(data[i].student[0])&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; else {&nbsp; &nbsp; &nbsp; &nbsp; unseen_classes.push(data[i].class)&nbsp; &nbsp; &nbsp; &nbsp; reOrganized.push({&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; class: data[i].class,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; students: [data[i].student[0]]&nbsp; &nbsp; &nbsp; &nbsp; })&nbsp; &nbsp; }}console.log(reOrganized)

婷婷同学_

let data = [{&nbsp; &nbsp; "class": "X",&nbsp; &nbsp; "student": [{&nbsp; &nbsp; &nbsp; "name": "Bumblebee",&nbsp; &nbsp; &nbsp; "id": "SAB77"&nbsp; &nbsp; }]&nbsp; },&nbsp; {&nbsp; &nbsp; "class": "X",&nbsp; &nbsp; "student": [{&nbsp; &nbsp; &nbsp; "name": "Omega",&nbsp; &nbsp; &nbsp; "id": "SAB78"&nbsp; &nbsp; }]&nbsp; },&nbsp; {&nbsp; &nbsp; "class": "IX",&nbsp; &nbsp; "student": [{&nbsp; &nbsp; &nbsp; "name": "Pluto",&nbsp; &nbsp; &nbsp; "id": "RBC17"&nbsp; &nbsp; }]&nbsp; },&nbsp; {&nbsp; &nbsp; "class": "IX",&nbsp; &nbsp; "student": [{&nbsp; &nbsp; &nbsp; "name": "16 psyche",&nbsp; &nbsp; &nbsp; "id": "RBC18"&nbsp; &nbsp; }]&nbsp; }];const result = data.reduce((acc, obj) => {&nbsp; let existedObj = acc.length && acc.find(ele => ele.class === obj.class);&nbsp; if (!acc.length || !existedObj) {&nbsp; &nbsp; acc.push(obj);&nbsp; &nbsp; return acc;&nbsp; }&nbsp; existedObj.student = [...existedObj.student, ...obj.student];&nbsp; return acc;}, []);console.log(result);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript