Reputation: 18198
Let's say I have two arrays:
var sellersDatabase = [
{ name: 'Mark', start_date: '2017-06-27' },
{ name: 'Jane', start_date: '2017-06-27' }
];
var sellersAPICall = [
{ name: 'Mark', start_date: '2017-06-27' },
{ name: 'Joe', start_date: '2017-06-22' },
{ name: 'Steven', start_date: '2017-04-11' },
{ name: 'Jane', start_date: '2017-06-27' }
];
How would, using either ES6 or Lodash, get the difference of those not included in the first array? Yes, I've tried lodash's difference()
.
So, my expected output would be:
var toInsertIntoDB = [
{ name: 'Joe', start_date: '2017-06-22' },
{ name: 'Steven', start_date: '2017-04-11' }
];
Doing this:
javascript
const toInsertToDB = _.difference(sellersDatabase, sellersAPICall);
console.log(toInsertToDB);
outputs:
[{
"name": "Mark",
"start_date": "2017-06-27"
}, {
"name": "Jane",
"start_date": "2017-06-27"
}]
(when I want the opposite)
Upvotes: 0
Views: 41
Reputation: 193358
Since you are comparing array of objects, and not primitives, use _.differenceBy()
, and state by which property the object should be compared. In addition the sellersAPICall
array should be the 1st (the reference array).
var sellersDatabase = [
{ name: 'Mark', start_date: '2017-06-27' },
{ name: 'Jane', start_date: '2017-06-27' }
];
var sellersAPICall = [
{ name: 'Mark', start_date: '2017-06-27' },
{ name: 'Joe', start_date: '2017-06-22' },
{ name: 'Steven', start_date: '2017-04-11' },
{ name: 'Jane', start_date: '2017-06-27' }
];
var result = _.differenceBy(sellersAPICall, sellersDatabase, 'name');
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
And if you want to compare 2 properties, you can use a callback function that concatenates both values:
var sellersDatabase = [
{ name: 'Mark', start_date: '2017-06-27' },
{ name: 'Jane', start_date: '2017-06-27' }
];
var sellersAPICall = [
{ name: 'Mark', start_date: '2017-06-27' },
{ name: 'Joe', start_date: '2017-06-22' },
{ name: 'Steven', start_date: '2017-04-11' },
{ name: 'Jane', start_date: '2017-06-27' }
];
var result = _.differenceBy(sellersAPICall, sellersDatabase, function(o) {
return o.name + '-' + o.start_date;
});
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
Upvotes: 5