鍍金池/ 問答/HTML/ javascript 多維數(shù)組合并的問題?

javascript 多維數(shù)組合并的問題?

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

實現(xiàn)結(jié)果:

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

請問 怎么實現(xiàn)?

回答
編輯回答
傲嬌范

我這個一句話的閱讀性差了點,供參考:
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:[]})));

2018年2月11日 22:35
編輯回答
爛人
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)
2018年3月28日 23:01
編輯回答
入她眼
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)
2017年9月24日 16:49
編輯回答
尕筱澄
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)
2018年5月14日 19:38