Node.js 如何将包含多employeeId、projectId的单对象拆分为配对对象集合
实现方案
你需要对employeeId和projectId两个数组做笛卡尔积全配对,复用其他公共字段生成新对象即可,Node.js环境下可以直接用如下原生JS实现:
function splitRecord(record) { // 提取公共字段,排除需要拆分的两个数组字段 const { employeeId, projectId, ...commonFields } = record; const result = []; // 两层循环完成全量配对 for (const empId of employeeId) { for (const projId of projectId) { result.push({ ...commonFields, employeeId: [empId], projectId: [projId] }); } } return result; } // 测试验证 const record = { "date":"2021-09-20", "startAt":"10:00", "endAt":"16:00", "employeeId": [5,2], "projectId":[50,48], "notes":"blahhh" } console.log(splitRecord(record));
说明
- 先用对象解构拆分要处理的数组字段和固定公共字段,避免重复复制公共属性
- 代码为纯原生JS实现,不需要引入任何第三方依赖,所有支持ES6+的Node.js版本都可以直接运行
- 如果你偏好更简洁的写法,可以用
flatMap简化代码:
const splitRecord = record => record.employeeId.flatMap(empId => record.projectId.map(projId => ({ ...(({ employeeId, projectId, ...rest }) => rest)(record), employeeId: [empId], projectId: [projId] })) )
内容的提问来源于stack exchange,提问作者Rafe Mulla
相关产品推荐
相关产品推荐

