使用 JavaScript 比较 2 个数组并创建一个新的对象数组,该数组不包含按 id 字段匹配的对象

Using JavaScript to compare 2 arrays and create a new array of objects which does not contains the objects that match by id field

我有两个对象数组。我想使用 JavaScript 创建一个新数组,其中不包含按 id 字段匹配的对象。

第一个数组

[{id: 1, name: "Jo"},{id: 2, name: "Pat"},{id: 3, name: "Mike"}]

第二个数组

[{id: 1, name: "Jo"},{id: 2, name: "Pat"},{id: 3, name: "Mike"}, {id: 4, name: "Mitch"}, {id: 5, name: "Karl"}]

应该return这个数组

[{id: 4, name: "Mitch"}, {id: 5, name: "Karl"}]

如果可能的话,使用lodash会更好。请注意,第一个数组始终小于或等于第二个数组,并且只能包含第二个数组中的对象。

所以我尝试了以下...

let newArray = _.reject(secondArray, {'id': firstArray});

没有成功,我需要语法方面的帮助。

非常感谢您的宝贵时间和帮助。

简短而甜美。 (假设one持有第一个数组,two持有第二个数组)

var oneIDs = one.map(function (a) {return a.id});

var result = two.filter(function (a) {
    return oneIDs.indexOf(a.id) === -1;
});

解释:

首先,获取第一个数组中元素的所有 ID 的查找数组。

其次,获取第二个数组的所有元素,其 id 不在查找数组 (oneIDs) 中。