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

阅读 4.4k
3 个回答
function fn(soureArr, targetArr) {
    soureArr.forEach(sourceItem => {
        if (targetArr.every(targetItem => sourceItem.id !== targetItem.id)) {
            targetArr.push(sourceItem);
        }
    });
    return targetArr;
}

这样是否满足你的需求

类似于合并排序的方法就能解决了吧

如果对顺序有要求的话再按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)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题