我有两个对象数组 - 新旧对象。必须通过一个唯一字段(MAC地址)比较对象。我想获得第三个数组或将其附加到现有旧数组并仅添加新对象。
例如
oldArray = [{mac: 11}, {mac: 12}, {mac: 14}];
newArray = [{mac: 11}, {mac: 13}, {mac: 14}];
我想像这样返回数组:
array = [{mac: 11}, {mac: 12}, {mac:13}, {mac: 14}]
我已经设法在Swift中使用contains方法做了类似的事情但是却无法在打字稿中找到解决方案。
答案 0 :(得分:4)
我会使用像
这样的东西let oldArray = [{mac: 11}, {mac: 12}, {mac: 14}];
let newArray = [{mac: 11}, {mac: 13}, {mac: 14}];
let tempSet = new Set([...oldArray, ...newArray].map(i => JSON.stringify(i)));
let resultArray = Array.from(tempSet).map(i => JSON.parse(i));
console.log(resultArray); // [{mac: 11}, {mac: 12}, {mac:13}, {mac: 14}]
JSON parse / stringify使得它可以作为数组项用于任何类型的对象,不仅适用于像{mac: N}
这样的单属性对象。
两个版本基于Array.prototype.reduce
,没有中间Set
。
显式(mac prop对象):
let resultArray = [...oldArray, ...newArray].reduce((s, i) =>
!s.some(j => i.mac === j.mac) ? [...s, i] : s
, []);
Generic(任何对象):
let resultArray = [...oldArray, ...newArray].reduce((s, i) =>
!s.some(j => JSON.stringify(i) === JSON.stringify(j)) ? [...s, i] : s
, []);