在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

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

javascript多維數(shù)組按照key值合并的問題

                var arr = [{
                    key: 1,
                    name: 2,
                    job: 3
                }, {
                    key: 1,
                    name: 22,
                    job: 33
                }, {
                    key: 2,
                    name: 222,
                    job: 333
                }, {
                    key: 2,
                    name: 2222,
                    job: 3333
                }];

arr 這個數(shù)組有多個字段,我想根據(jù)key這個字段相同的屬性的時候,就進行合并。
最終想實現(xiàn)的結(jié)果如arr2

    arr2 = [{
                    key: 1,
                    info: [{
                        name: 2,
                        job: 3
                    }, {
                        name: 22,
                        job: 33
                    }]
                }, {
                    key: 2,
                    info: [{
                        name: 222,
                        job: 333
                    }, {
                        name: 2222,
                        job: 3333
                    }]
                }];
回答
編輯回答
敢試
var keys = Array.from(new Set(arr.map(o=>o.key)));
var result = keys.map(key=>{
    return {key: key,
        info: arr.filter(o=>o.key==key).map(o=>({name:o.name, job:o.job}))
    }
});
console.log(result);
2017年6月21日 03:23
編輯回答
妖妖
function mergeKey(arr) {
  const keyMap = arr.reduce((r, item)=>{
    const newItem = {...item};
    delete newItem.key;
    r[item.key] = (r[item.key] || []).concat(newItem);
    return r;
  }
  , {});

  return Object.keys(keyMap).map(key=>({
    key,
    info: keyMap[key],
  }));
}

mergeKey(arr)
2018年1月2日 10:07
編輯回答
傲寒
let resultArr=[];//結(jié)果數(shù)組
arr.forEach(item=>{
    
    //判斷數(shù)組里是否有這一項,空數(shù)組filter出來也是空的,所以無需特殊判斷
    let fltrArr=resultArr.filter(_item=>_item.key==item.key);
    //無=>向結(jié)果數(shù)組里加一項,有=>將filter出的結(jié)果的(應該只有一條)的info里push一下 
    //name,job,filter的結(jié)果是淺拷貝的,所以對應的resultArr里也會改變
    fltrArr.length==0?
    resultArr.push({key:item.key,info:[{name:item.name,job:item.job}]})
    :fltrArr[0].info.push({name:item.name,job:item.job})
    
})

2017年3月14日 06:52