let arr1 = [ 
    {a: 1, b: 2, c:3, d: 4, f: 5},
    {a: 2, b: 3, c:4, d: 5, f: 6} 
];
let arr2 = [
   {a: 1, b: 2, c:3, d: 4, f: 5},
   {a: 2, b: 3, c:4, d: 5, f: 6},
   {a: 2, b: 3, c:4, d: 5, f: 7},
   {a: 2, b: 3, c:4, d: 7, f: 6} 
];JS求两个对象数组的差集

  {a: 2, b: 3, c:4, d: 5, f: 7},
  {a: 2, b: 3, c:4, d: 7, f: 6} 
]

解决方案 »

  1.   


    let arr1 = [
        {a: 1, b: 2, c:3, d: 4, f: 5},
        {a: 2, b: 3, c:4, d: 5, f: 6}
    ];
    let arr2 = [
       {a: 1, b: 2, c:3, d: 4, f: 5},
       {a: 2, b: 3, c:4, d: 5, f: 6},
       {a: 2, b: 3, c:4, d: 5, f: 7},
       {a: 2, b: 3, c:4, d: 7, f: 6}
    ];let arr3 = arr2.filter(v=>{
    var str = JSON.stringify(v);
    return arr1.every(v=>JSON.stringify(v)!=str);
    });
    console.log(arr3);
      

  2.   


    如何是这种
    let arr1 = [
    {fpcid: "2da37fdfe66140089dc3367b21cc6194", fpcNameCode: "34"},
    {fpcid: "2da37fdfe66140089dc3367b21cc6195", fpcNameCode: "33"},
    {fpcid: "2da37fdfe66140089dc3367b21cc6196", fpcNameCode: "35"}
    ];
    let arr2 = [
    {fpcid: "2da37fdfe66140089dc3367b21cc6194", fpcNameCode: "34"},
    {fpcid: "2da37fdfe66140089dc3367b21cc6195", fpcNameCode: "33"}
    ];
    就不能用了
      

  3.   

    两个数组交换位置再筛选一遍let arr3 = arr2.filter(v=>{
    var str = JSON.stringify(v);
    return arr1.every(v=>JSON.stringify(v)!=str);
    }).concat(arr1.filter(v=>{
    var str = JSON.stringify(v);
    return arr2.every(v=>JSON.stringify(v)!=str);
    }));
      

  4.   

    也可以用删除两数组中相同元素的方法,效率会高很多for (var i = arr1.length-1; i >= 0; i--) {
    var str = JSON.stringify(arr1[i]);
    var f = false;
    for (var j = arr2.length-1; j >= 0; j--) {
    if (JSON.stringify(arr2[j])==str) {
    arr2.splice(j,1);
    f = true;
    }
    }
    if (f)
    arr1.splice(i,1);
    }
    let arr3 = arr1.concat(arr2);