js 关于数组对象合并的问题

数据是这样的
`

const arr = [{
  id: 1,
  age: 123
},
{
  id: 2,
  age: 12
},{
  id: 2,
  age: 90
},{
  id: 2,
  age: 1222
},{
  id: 1,
  age: 9090
}]

`
最终数据是这样

`

// obj是根据id相同的次数push,比如以上id=1重复了2次,id=2重复了3次,最终结构如下
const obj = {
   name: 'name是写死的,就是这样'
}
const arr = [{ // id=1出现两次,children里就push两个对象
    id: 1,
    age: 123,   
    children: [{
      name: 'name是写死的,就是这样'
     },{
      name: 'name是写死的,就是这样'
     }
    ]
 },
 {
    id: 2, // id=2出现三次,children里就push三个对象
    age: 12,   
    children: [{
      name: 'name是写死的,就是这样'
     }, {
      name: 'name是写死的,就是这样'
     }, {
      name: 'name是写死的,就是这样'
     }
    ]
 }]

`
写不出来,感谢不吝赐教

阅读 1.7k
1 个回答

声明一个空数组result,用来存储结果,假设里面的每一项叫data。
声明一个用一个空对象obj,用来存储id->data的映射。
遍历源数组attr,对于每一项item判断是否存在obj[item.id]

  • 不存在则根据你想要的data格式创建obj[item.id] = data并往obj[item.id]的children里加一项
  • 存在则直接往 obj[item.id]的children里加一项

遍历完成则result就是你想要的结果。


这个是思路,本来写代码比打这么多字快得多,但所谓”授人以鱼不如授人以渔“,就不给代码实现了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题