首页 > 解决方案 > 按键分组对象数组 - javascript

问题描述

在任何事情之前,我确实在互联网上寻找其他答案,但我仍然无法让它工作,我不知道为什么

所以,我有一个包含对象的数组:

array =[
   {
      "name":"Alex",
      "id":0
   },
   {
      "age":20,
      "id":0
   },
   {
      "name":"John",
      "id":1
   },
   {
      "age":30,
      "id":1
   }
]

我想根据他们的 id 对它们进行分组,所以我希望结果是这样的:

array =[
   [
      {
         "name":"Alex",
         "id":0
      },
      {
         "age":20,
         "id":0
      }
   ],
   [
      {
         "name":"John",
         "id":1
      },
      {
         "age":30,
         "id":1
      }
   ]
]

我找到了一堆与类似的东西一起工作的答案,所以我试了一下,但我不知道为什么它不起作用

 array.reduce((a, value) => {
       a[value.id] = [...a[value.id] || [], value];
        return a;
    }, [])

有人可以解释为什么吗?

标签: javascriptarraysobjectecmascript-6reduce

解决方案


那是因为value.indexis 不存在所以它的值总是undefined

更改value.indexvalue.id,它将按预期工作。

const array = [{
    "name": "Alex",
    "id": 0
  },
  {
    "age": 20,
    "id": 0
  },
  {
    "name": "John",
    "id": 1
  },
  {
    "age": 30,
    "id": 1
  }
];

const output = array.reduce((a, value) => {
  a[value.id] = [...a[value.id] || [], value];
  return a;
}, []);
console.log(output);


推荐阅读