javascript - 如何按给定字段重新组合对象数组
问题描述
我给了对象数组,像这样
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));
如何添加新的关键工作人员信息并将信息推送到该字段
解决方案
如果您在每次迭代时创建一个新对象而不是数组,则可以使用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));
推荐阅读
- r - 闪亮的服务器 docker 应用程序在本地运行,但在部署到 AWS Fargate 时不运行
- c++ - 值包装器的类构造函数优先级与可变参数模板构造函数
- mysql - MYSQL 针对具有特定日期的表测试一条记录中的多个日期
- mysql - 同一个 SQL 语句中的多个条件计数
- javascript - 如何使用 Angular 6 在此代码中从 C# 更改函数 AddDays?
- ruby-on-rails - Rails:创建的参数未正确保存
- vue.js - 从 vuex 过滤的数据在 vue 组件中没有反应
- sql - 如何在 SQL 中按年份汇总数据?
- sql - 如何使用 Django orm 创建临时布尔字段
- asp.net - 将 texbox 文本保存到 ASP.NET 网站中的 SQL Server