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

鍍金池/ 問答/Java  HTML/ 合并兩個對象數(shù)組中指定 key 的值

合并兩個對象數(shù)組中指定 key 的值

如題,有兩個對象數(shù)組,arr1 和 arr2

var arr1 = [
    {
      cid: 1,
      name: 'A',
      goods: [
        { gid: 11, gname: 'a', cid: 1, count: 1 },
        { gid: 12, gname: 'b', cid: 1 },
        { gid: 13, gname: 'c', cid: 1 }
      ]
    },
    {
      cid: 2,
      name: 'B',
      goods: [
        { gid: 14, gname: 'd', cid: 2, count: 2 }
      ]
    },
    {
      cid: 3,
      name: 'C',
      goods: []
    },
    {
      cid: 4,
      name: 'D',
      goods: []
    }
  ]
var arr2 = [
    { gid: 11, gname: 'a', cid: 1, count: 3 },
    { gid: 14, gname: 'd', cid: 2, count: 1 }
  ]

想把相同 gid 中的 count 進行累加,形成一個新的數(shù)組,最終得到如下效果:
(PS:arr 中的 gid 一定是 arr1 已有的,因此不用考慮往空 goods 數(shù)組中插入對象的情況)

var arr3 = [
    {
      cid: 1,
      name: 'A',
      goods: [
        { gid: 11, gname: 'a', cid: 1, count: 4 },
        { gid: 12, gname: 'b', cid: 1 },
        { gid: 13, gname: 'c', cid: 1 }
      ]
    },
    {
      cid: 2,
      name: 'B',
      goods: [
        { gid: 14, gname: 'd', cid: 2, count: 3 }
      ]
    },
    {
      cid: 3,
      name: 'C',
      goods: []
    },
    {
      cid: 4,
      name: 'D',
      goods: []
    }
  ]
回答
編輯回答
傲嬌范
let getMap = (arr, key) => arr.map(a => a[key]);

let cidMap = getMap(arr1, 'cid');

arr2.forEach(item => {
      let goods = arr1[cidMap.indexOf(item['cid'])]['goods'];
      let goodsMap = getMap(goods, 'gid');
      // 手機碼字,忘了 goods 的操作會不會影響原來的數(shù)組……
      // 題主自行試一下吧
      arr1[cidMap.indexOf(item['cid'])]['goods']
             [goodsMap.indexOf(item['gid'])]
             ['count'] += item['count'];
});
2017年1月17日 13:51
編輯回答
夢囈
 arr1.forEach(a=>{
        a.goods=a.goods.map(v=>{
            var index=arr2.findIndex(c=>c.gid===v.gid)
            if(index>=0){
                v.count+=arr2[index].count
            }
            return !v.count?{gid:v.gid,gname:v.gname}:{gid:v.gid,gname:v.gname,count:v.count}
        })
    })
2017年11月21日 05:32