JavaScript数组里面的对象重复的合并内容

var arr = [{
  key: '01',
  value: '乐乐',
  id:001
}, {
  key: '02',
  value: '博博',
  id:002
}, {
  key: '03',
  value: '淘淘',
  id:003
},{
  key: '04',
  value: '哈哈',
  id:004
},{
  key: '01',
  value: '小明',
  id:005
},{
  key: '03',
  value: '欢欢',
  id:006
}];




var newArr = [{
  key: '01',
  list: [{
    value: '乐乐',
    id:001
  }, {
    value: '小明',
    id:005
  }]
}, {
  key: '02',
  list: [{
    value: '博博',
    id:002
  }]
}, {
  key: '03',
  list: [{
    value: '淘淘',
    id:003
  },{
    value: '欢欢',
    id:006
  }]
},{
  key: '04',
  list: [{
    value: '哈哈',
    id:004
  }]
}];

我要怎么样把arr 去重后转换成 newArr 这种格式呢

阅读 1.8k
2 个回答
var newArr = arr.reduce((res, {key, value, id}) => {
  let item = res.find(v => key === v.key);
  if (!item) {
    item = {key, list: []};
    res.push(item);
  }
  item.list.push({value, id});
  return res;
}, []);
Object.values(
    arr.reduce((obj, cur) => {
        if (obj[cur.key]) {
            obj[cur.key].list.push({
                value: cur.value,
                id: cur.id
            });
        } else {
            obj[cur.key] = {
                key: cur.key,
                list: [
                    {
                        value: cur.value,
                        id: cur.id
                    }
                ]
            };
        }
        return obj;
    }, {})
)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题