Search code examples
javascriptjsonlodasharray-difference

Lodash finding difference between JSON arrays


Using lodash for finding difference:

c1Arr is:

[ { varName: 'city', varValue: 'cccccccc' },
  { varName: 'country', varValue: 'dddddddd' }
 ]

c2Arr is:

[ { varName: 'abc', varValue: 'aaa' },
  { varName: 'city', varValue: 'cccccccc' },
  { varName: 'country', varValue: 'dddddddd' }
 ]

Executing the following code

    var dArr = _.difference(c2Arr, c1Arr);
    console.log(dArr);

Why don't I get the result :

[ { varName: 'abc', varValue: 'aaa' }]

Instead I get (i.e. c2Arr)

[ { varName: 'abc', varValue: 'aaa' },
  { varName: 'city', varValue: 'cccccccc' },
  { varName: 'country', varValue: 'dddddddd' }
 ]

Solution

  • You have to provide the comparator function, since the elements are object.

    Try this,

    _.differenceWith(c2Arr, c1Arr, _.isEqual);
    

    var c1Arr = [{
      varName: 'city',
      varValue: 'cccccccc'
    }, {
      varName: 'country',
      varValue: 'dddddddd'
    }]
    
    var c2Arr = [{
      varName: 'abc',
      varValue: 'aaa'
    }, {
      varName: 'city',
      varValue: 'cccccccc'
    }, {
      varName: 'country',
      varValue: 'dddddddd'
    }]
    
    var dArr = _.differenceWith(c2Arr, c1Arr, _.isEqual);
    console.log(dArr);
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>