首页 > 解决方案 > 如何通过主键对数组的所有数据项进行分组并将组的所有剩余条目收集为分组值列表来重构数组的所有数据项?

问题描述

我在按键合并数组中的对象以及对数组中具有相同键的值进行分组时遇到问题。例子:

let a = [{
    key: "1",
    value: "a",
    value2: "b"
}, {
    key: "2",
    value: "a",
    value2: "b"
}, {
    key: "1",
    value: "b",
    value2: "a"
}, {
    key: "1",
    value: "c",
    value2: "d"
}]

我想要达到的结果是:

[{
    key: "1",
    value: ["a", "b", "c"],
    value2: ["b", "a", "d"]
}, {
    key: "2",
    value: ["a"],
    value2: ["b"]
}]

有没有人在 javascript/typescript 中有一个简单的解决方案?

我已经阅读了很多关于类似问题的主题,但没有一个与我上面提到的完全相同。

提前致谢!

标签: javascriptarraystypescriptdata-structuresreduce

解决方案


你可以这样试试。它首先将数据简化为基于键的对象,然后将其转换为您的数组。

var a = [{key:"1", value:"a",value2:"b"}, {key:"2", value:"a",value2:"b"}, {key:"1", value:"b",value2:"a"},{key:"1", value:"c",value2:"d"}]

a = a.reduce((acc, curr) => {
  if (!acc[curr.key]) {
    acc[curr.key] = { value: [curr.value], value2: [curr.value2] };
  } else {
    acc[curr.key].value.push(curr.value);
    acc[curr.key].value2.push(curr.value2);
  }
  
  return acc;
}, {});

a = Object.entries(a).map(([key, value]) => ({ key, ...value }))

console.log(a);


推荐阅读