数组分组,出现循环?

image.png

数组分组,
相同属性的元素放在elements里面;
为什么会嵌套这么多层啊

const arr = [{
    type: "dd",
    id:1
    
},{
    type: "dd",
    id:2
},{
    type: "dd",
    id:3
},{
    type: "2",
    id:4
}]

期望得到

const result = [{
    type: "dd",
    id:1,
    elements: [{
    {
    type: "dd",
    id:1
    
    },{
        type: "dd",
        id:2
    },{
        type: "dd",
        id:3
    },
    }]
}, {
    type: "2",
    id:4
}]
阅读 1.2k
1 个回答

这样?

let result = Object.values(arr.reduce((obj, i) => {
    (obj[i.type] ??= {...i, elements: []}).elements.push(i);
    return obj;
}, {}));

result.forEach(i => i.elements.length > 1 || delete i.elements);

结果:

[
  {
    "type": "2",
    "id": 4
  },
  {
    "type": "dd",
    "id": 1,
    "elements": [
      {
        "type": "dd",
        "id": 1
      },
      {
        "type": "dd",
        "id": 2
      },
      {
        "type": "dd",
        "id": 3
      }
    ]
  }
]
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题