如何通过将键值分组在一起来创建多个数组?

时间:2019-07-17 07:03:59

标签: javascript arrays sorting key

我有一个对象列表

storage = [{
  "name": "PAYR AS",
  "year": "2016",
  "importance": 0.015
}, {
  "name": "ENTRILLO AS",
  "year": "2017",
  "importance": 0.43200000000000005
}, {
  "name": "ENTRILLO AS",
  "year": "2017",
  "importance": 0.43200000000000005
}]

通过这个数组,我希望创建一个新的数组,在一个列表中有两个列表,我们已经按名称键进行了排序

list = [
  [{
    "name": "PAYR AS",
    "year": "2016",
    "importance": 0.015
  }],
  [{
    "name": "ENTRILLO AS",
    "year": "2017",
    "importance": 0.43200000000000005
  }, {
    "name": "ENTRILLO AS",
    "year": "2017",
    "importance": 0.43200000000000005
  }]
]

有没有简单的方法可以在javascript中做到这一点?

我尝试创建一定数量的新数组并追加到它们中,但是,我遇到了一个问题,我需要事先知道我有多少个名称元素,而我不一定知道。

谢谢,如果这是一个愚蠢的问题,对不起!

1 个答案:

答案 0 :(得分:0)

首先制作一个将分组键映射到项目的映射(我认为这也将更容易使用)。在您的示例中为name。您可以使用此地图来创建嵌套数组:

const rawData = [
  {
    "name":"PAYR AS",
    "year":"2016",
    "importance":0.015,
  },
  {
    "name":"ENTRILLO AS",
    "year":"2017",
    "importance":0.43200000000000005,
  },
  {
    "name":"ENTRILLO AS",
    "year":"2017",
    "importance":0.43200000000000005,
  },
];

const companyToData = rawData.reduce((acc, item) => {
  const foo = acc[item.name] ? acc[item.name] : [];
  return {
    ...acc,
    [item.name]: [
      ...foo,
      item,
    ],
  };
}, {});

const data = Object.values(companyToData);
console.log(data);