如何从另一个对象数组中逐字减去一个对象数组
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));
我认为我的问题很简单,但随着我开始学习 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));