首页 > 解决方案 > 重新组织对象数组

问题描述

所以我有一组对象,其中包含不同项目中不同活动的信息。它看起来像这样

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
  }
]

不知道是什么问题,试了好几次才解决。有人可以帮我克服困难吗?任何帮助将不胜感激。

标签: javascriptarraysobject

解决方案


您可以使用reduceObject.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);


推荐阅读