如何从另一个对象数组中逐字减去一个对象数组

How to subtract one object array literally from another object Array

我认为我的问题很简单,但随着我开始学习 javascript,我遇到了以下问题。 我有 2 个对象数组,其中包含一些可以重复的相同 ID。我想用普通 javascript 没有库来相互减去数组中的相同 ID。我找到了这个过滤方法,但它删除了所有符合条件的对象。 我希望只删除满足数组中可以找到的条件的 ID 数量。

这是我的例子:

var filter = [{"Id":"123","Name":"OPL-00074045","arrayPicklist":"Categorie__c"},{"Id":"124","Name":"OPL-00074051","arrayPicklist":"Categorie__c"}]   
var filter2 = [{"Id":"123","Name":"OPL-00074045","arrayPicklist":"Categorie__c"},{"Id":"123","Name":"OPL-00074051","arrayPicklist":"Categorie__c"},{"Id":"123","Name":"OPL-00074045","arrayPicklist":"Regio__c"}]     
var newFilter = filter2.filter(o => !filter.find(o2 => o.Id === o2.Id &&  o.arrayPicklist === o2.arrayPicklist));
console.log(JSON.stringify(newFilter));

http://jsfiddle.net/vy6fcgrc/29/

我预计:

newFilter = [{"Id":"123","Name":"OPL-00074051","arrayPicklist":"Categorie__c"},{"Id":"123","Name":"OPL-00074045","arrayPicklist":"Regio__c"}]

var filter1 = [{"Id":"123","Name":"OPL-00074045","arrayPicklist":"Categorie__c"},
{"Id":"124","Name":"OPL-00074051","arrayPicklist":"Categorie__c"}]

var filter2 = [{"Id":"123","Name":"OPL-00074045","arrayPicklist":"Categorie__c"},
{"Id":"123","Name":"OPL-00074051","arrayPicklist":"Categorie__c"},
{"Id":"123","Name":"OPL-00074045","arrayPicklist":"Regio__c"}]


var props = ["Id","Name", "arrayPicklist"];

var result = filter1.filter(function(o1){
    // filter out (!) items in result2
    return !filter2.some(function(o2){
        return (o1.Id === o2.Id && o1.arrayPicklist===o2.arrayPicklist) ;          // assumes unique id
    });
}).map(function(o){
    // use reduce to make objects with only the required properties
    // map to apply this to the filtered array as a whole
    return props.reduce(function(newo, arrayPicklist){
        newo[arrayPicklist] = o[arrayPicklist];
        return newo;
    }, {});
});
alert(JSON.stringify(result));