首页 > 解决方案 > 如何按给定字段重新组合对象数组

问题描述

我给了对象数组,像这样

const data = [
    {id: 1,  name: 'Alex', job: 'IT'},
    {id: 2,  name: 'Pavel', job: 'IT'},
    {id: 3,  name: 'Joe', job: 'IT'},
    {id: 4,  name: 'Josh', job: 'IT'},
    {id: 5, name: 'Max', job: 'teacher'},
    {id: 6, name: 'Sam', job: 'teacher'}
]

我需要按现场作业过滤的数组数组

const result = [
    {job: 'IT', 
    workersInfo: [
    {id:1, name:'Alex'}, 
    {id:2, name:'Pavel'}, 
    {id:3, name:'Joe'}, 
    {id:4, name:'Josh'}
    ]
    }, 
    {job: 'teacher', 
    workersInfo: [
    {id:5, name: 'Max'}, 
    {id:6, name: 'Sam'}
    ]  
    }
]

我试过这个,但这不是我想要的

const data = [
    {id: 1,  name: 'Alex', job: 'IT'},
    {id: 2,  name: 'Pavel', job: 'IT'},
    {id: 3,  name: 'Joe', job: 'IT'},
    {id: 4,  name: 'Josh', job: 'IT'},
    {id: 5, name: 'Max', job: 'teacher'},
    {id: 6, name: 'Sam', job: 'teacher'}
]

const groupList = data.reduce((reduce, it) => { 
        reduce[it.job] = reduce[it.job] || [];
        reduce[it.job].push({id: it.id, name: it.name});
        return reduce;
 }, {})


console.log(Object.values(groupList));

如何添加新的关键工作人员信息并将信息推送到该字段

标签: javascriptarrayssortingjavascript-objects

解决方案


如果您在每次迭代时创建一个新对象而不是数组,则可以使用Object.values

const data = [
  {id: 1,  name: 'Alex', job: 'IT'},
  {id: 2,  name: 'Pavel', job: 'IT'},
  {id: 3,  name: 'Joe', job: 'IT'},
  {id: 4,  name: 'Josh', job: 'IT'},
  {id: 5, name: 'Max', job: 'teacher'},
  {id: 6, name: 'Sam', job: 'teacher'}
];

const groupList = data.reduce((acc, { job, id, name }) => {
  acc[job] = acc[job] || { job, workersInfo: [] };
  acc[job].workersInfo.push({ id, name });
  return acc;
}, {})


console.log(Object.values(groupList));


推荐阅读