用数组连接 2 个对象并删除重复项 (js)

concat 2 objects with arrays and delete duplicates (js)

有 2 个数组:看起来像这样

1) 第一个数组

{day:mo, hours:[{id:1,color:grey},{id:2,color:grey},{id:3,color:grey},{id:4,color:grey}]}

2) 第二个数组

{day:mo, hours:[{id:1,color:white},{id:2,color:white},{id:3,color:white},{id:4,color:white},{id:5,color:white}]}

结果必须是

{day:mo, hours:[{id:1,color:grey},{id:2,color:grey},{id:3,color:grey},{id:4,color:grey},{id:5,color:white}]}

所以我需要先从 2 个数组中删除相同的值,然后再连接它。

尝试这样做

clearArrFunc(arr1,arr2) {
    // do something
     for(var i in arr1){
     console.log(arr1[i]);
      for(var j in arr2)   {
        if(JSON.stringify(arr1[i].day) == JSON.stringify(arr2[j].day)) {
         delete arr2[j] ;
      }

       }

    }
  //  console.log(arr2);
    return arr1.concat(arr2);

    }

连接两个数组,然后从结果中消除重复的 ID:

a = [{id:1,color:'grey'},{id:2,color:'grey'},{id:3,color:'grey'},{id:4,color:'grey'}]
b = [{id:1,color:'white'},{id:2,color:'white'},{id:3,color:'white'},{id:4,color:'white'},{id:5,color:'white'}]

result = a
    .concat(b)
    .filter((x, i, self) => self.findIndex(y => y.id === x.id) === i);

console.log(result)

一个不那么简洁但更有效的选择是从第一个数组构建一组 id,然后只追加第二个 id 不在集合中的元素:

a = [{id:1,color:'grey'},{id:2,color:'grey'},{id:3,color:'grey'},{id:4,color:'grey'}]
b = [{id:1,color:'white'},{id:2,color:'white'},{id:3,color:'white'},{id:4,color:'white'},{id:5,color:'white'}]

ids = new Set(a.map(x => x.id))
result = a.concat(b.filter(x => !ids.has(x.id)))

console.log(result)

另一种方法,从第二个数组中删除第一个数组中存在的那些值,并将结果与​​第一个数组连接。

var x = [{id:1,color:'grey'},{id:2,color:'grey'},{id:3,color:'grey'},{id:4,color:'grey'}];
var y = [{id:1,color:'white'},{id:2,color:'white'},{id:3,color:'white'},{id:4,color:'white'},{id:5,color:'white'}];

var r = x.concat(y.filter(function(obj) {
    return !x.some(function(o) {
        return o.id===obj.id;
    });
}));

console.log(r);

使用 Lodash (https://lodash.com)

const _ = require('lodash');

const a = [{id: 1, color: "grey"},{id: 2, color: "grey"},{id: 3, color: "grey"},{id: 4, color: "grey"}];
const b = [{id: 1, color: "white"},{id: 2, color: "white"},{id: 3, color: "white"},{id: 4, color: "white"},{id: 5, color: "white" }];

const result = _.unionBy(o1.hours, o2.hours), 'id');
// result = [{id: 1, color: "grey"}, {id: 2, color: "grey"}, {id: 3, color: "grey"}, {id: 4, color: "grey"}, {id: 5, color: "white"}]