javascript 多维数组合并的问题?

            var arr = [{
                id: 1,
                name: 'a'
            }, {
                id: 1,
                name: 'b'
            }, {
                id: 2,
                name: 'c'
            }, {
                id: 2,
                name: 'd'
            }];

实现结果:

arr = [{
                id: 1,
                name: ['a', 'b']
            }, {
                id: 2,
                name: ['c', 'd']
            }];

请问 怎么实现?

阅读 2.5k
4 个回答
let newArr = []
arr.forEach(el=>{
    const result = newArr.findIndex(ol=>{return el.id === ol.id})
    if(result!== -1){
        newArr[result].name.push(el.name)
    }else{
        newArr.push({id:el.id,name:[el.name]})
    } 
})
console.log(newArr)
let t = {}
arr.forEach(val => {
  t[val.id] = t[val.id] || { name: [] }
  t[val.id].name.push(val.name)
})
let res = []
for (let val of Object.keys(t)) {
  res.push({
    id: val,
    name: t[val].name
  })
}
console.log(res)
function mergeArr(arr) {
  const flatObj = arr.reduce((iter , val) => {
    if(iter[val.id]) {
      iter[val.id].name.push(val.name)
    } else {
      iter[val.id] = {
        id: val.id,
        name: [val.name]
      }
    }
    return iter
  }, {})
  const mergeRst = Object.keys(flatObj).map(v => flatObj[v])
  return mergeRst
}
mergeArr(arr)

我这个一句话的阅读性差了点,供参考:
arr.reduce((m,c)=>[m.find(x=>x.id===c.id).name.push(c.name), m][1], Array.from(new Set(arr.map(n=>n.id)), m=>new Object({id:m,name:[]})));

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