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

鍍金池/ 問答/PHP  HTML/ javascript 數組去重后合并

javascript 數組去重后合并

            var arr1 =[{id:1,name:1},{id:2,name:2},{id:3,name:3}];
            var arr2 =[{id:1,name:111}];
            var arr3 =[{id:4,name:44},{id:5,name:55}];

比如原始數組是arr1,另外一個數組可能是arr2,也可能是arr3;怎么實現后面2個數組和arr1對比后,如果id重復了,就去重,如果id沒有重復就合并成一個數組;
類似如果和arr2對比:arr1就是:[{id:2,name:2},{id:3,name:3}];
如果是arr3對比:arr1就是:[{id:1,name:1},{id:2,name:2},{id:3,name:3},{id:4,name:44},{id:5,name:55}];

回答
編輯回答
慢半拍

如果對順序有要求的話再按id用sort方法排序一下。。
想了半天。。不知道有沒有算法復雜度更低的寫法。。

const fn = (arr, ...arrOther) => {
  let hash = {}
  return arr.concat(...arrOther).reduceRight((iter, v) => {
    if(!hash[v.id]) {
      hash[v.id] = true
      iter.push(v) 
    }
    return iter
  }, [])
}

var arr1 =[{id:1,name:1},{id:2,name:2},{id:3,name:3}]
var arr2 =[{id:1,name:111}]
var arr3 =[{id:4,name:44},{id:5,name:55}]

fn(arr1, arr2, arr3)
2017年5月20日 07:26
編輯回答
薔薇花

類似于合并排序的方法就能解決了吧

2017年10月22日 09:38
編輯回答
小曖昧
function fn(soureArr, targetArr) {
    soureArr.forEach(sourceItem => {
        if (targetArr.every(targetItem => sourceItem.id !== targetItem.id)) {
            targetArr.push(sourceItem);
        }
    });
    return targetArr;
}

這樣是否滿足你的需求

2017年3月7日 18:08