javascript - 重新组织对象数组
问题描述
所以我有一组对象,其中包含不同项目中不同活动的信息。它看起来像这样
const input = [
{
Project: 1,
ID: "1-1",
},
{
Project: 1,
ID: "1-2",
},
{
Project: 2,
ID: "2-1",
},
];
从这个,我想去这个
output = [{
Project: 1,
ID1: 1 - 1,
ID2: 1 - 2,
},
{
Project: 1,
ID1: 2 - 1,
},
];
这是我到目前为止所拥有的:
let currentProject = ''
let output = []
for (const e of input) {
let counter
let outputObj = {}
if (currentProject !== e.Project) {
output.push(outputObj)
counter = 1
outputObj = {}
outputObj.projectNum = e.Project
currentProject = e.Project
}
if (currentProject == e.Project) {
outputObj['ID' + counter] = e.ID
counter++
}
}
这是我要回来的:
output = [{
Project: 1,
ID1: 1 - 1
},
{
Project: 1,
ID1: 2 - 1
}
]
不知道是什么问题,试了好几次才解决。有人可以帮我克服困难吗?任何帮助将不胜感激。
解决方案
您可以使用reduce,Object.keys来实现这一点
const input = [{
Project: 1,
ID: "1-1",
},
{
Project: 1,
ID: "1-2",
},
{
Project: 2,
ID: "2-1",
},
];
const result = input.reduce((acc, curr) => {
const { Project, ID } = curr;
const obj = acc.find((el) => el.Project === Project);
if (obj) {
const length = Object.keys(obj).length;
obj[`ID${length}`] = ID;
} else {
acc.push({ Project, [`ID${1}`]: ID });
}
return acc;
}, []);
console.log(result);
推荐阅读
- python-3.x - python3 和 matplotlib:更改锚定文本的背景颜色
- python - CV2:尝试拍照时出现“[WARN:0] terminating async callback”
- java - AssertEquals 为两个相同的对象返回 false
- javascript - 在 forloop 中使用 .push 的函数不断地为数组赋值
- node.js - 在 AWS Lambda 上发出 https 请求
- alexa - Alexa 接受内置插槽类型的错误值
- mysql - 从外部表中按日期和 id 对 COUNT 进行分组
- r - 返回字符串的开头,最多包含两个字符中的任何一个
- azure - 使用 Azure Data Lake gen2 列出 blob 的问题
- python - 当 python 在 SQL Server 代理中作为作业运行时出现 ModuleNotFoundError