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

javascript 數(shù)組去重后合并

            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}];

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

回答
編輯回答
慢半拍

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

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