为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

米脂 2023-07-06 15:10:57
我有一个如下所示的数组: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"            }        ]    }]
查看完整描述

3 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

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)


查看完整回答
反对 回复 2023-07-06
?
森林海

TA贡献2011条经验 获得超2个赞

尝试这个。


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"

            }

        ]

    }

]

var reOrganized = [];

var unseen_classes = [];


for (var i = 0; i < data.length; i++) {

    if (unseen_classes.indexOf(data[i].class) !== -1) {

        for (var j = 0; j < reOrganized.length; j++) {

            if (reOrganized[j].class === data[i].class) {

                reOrganized[j].students.push(data[i].student[0])

            }

        }

    }

    else {

        unseen_classes.push(data[i].class)

        reOrganized.push({

            class: data[i].class,

            students: [data[i].student[0]]

        })

    }

}

console.log(reOrganized)


查看完整回答
反对 回复 2023-07-06
?
婷婷同学_

TA贡献1844条经验 获得超8个赞

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 result = data.reduce((acc, obj) => {

  let existedObj = acc.length && acc.find(ele => ele.class === obj.class);

  if (!acc.length || !existedObj) {

    acc.push(obj);

    return acc;

  }

  existedObj.student = [...existedObj.student, ...obj.student];

  return acc;

}, []);


console.log(result);


查看完整回答
反对 回复 2023-07-06
  • 3 回答
  • 0 关注
  • 146 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信