Assume we have the following arrays of objects to be compared based on property id
:
a = [{'id':'1', 'name':'a1'}, {'id':'2', 'name':'a2'}, {'id':'3', 'name':'a3'}]
and
b = [[{'id':'2', 'name':'a2'}, ]
How can I subtract b from a? So that we have c = a - b
which should be equal to [ {'id':'1', 'name':'a1'}, {'id':'3', 'name':'a3'}]
.
I have tried using this:
var c= a.filter(function(item) { return !b.includes(item.id); });
but still not working.
Advertisement
Answer
How about this solution? It assumes that ‘b’ is also an array so for each element of ‘a’ you check if there is a matching object in ‘b’. If there is a matching object then return a false in the filter function so that that element is discarded.
var a = [{ 'id': '1', 'name': 'a1' }, { 'id': '2', 'name': 'a2' }, { 'id': '3', 'name': 'a3' }] var b = [{ 'id': '2', 'name': 'a2' }] var c = a.filter(function(objFromA) { return !b.find(function(objFromB) { return objFromA.id === objFromB.id }) }) console.log(c)