-3

I want to get the difference between the first array and the second array. As a result;

var arr1 = [{name: "Yesügey", lastName: "Yeşil", phone: "+90 333 9695395"},
{name: "Firdest", lastName: "Firdevis", phone: "+90 333 4234638"},
{name: "Pehlivan", lastName: "Pehlül", phone: "+90 333 9114821"},
{name: "Urbeyi", lastName: "Usberk", phone: "+90 333 1617245"},
{name: "Kâmile", lastName: "Kâşife", phone: "+90 333 6784334"},
{name: "Akdoruk", lastName: "Akdöl", phone: "+90 333 4687455"}]

and

var arr2 = [{name: "Yesügey", lastName: "Yeşil", phone: "+90 333 9695395"},
{name: "Firdest", lastName: "Firdevis", phone: "+90 333 4234638"},
{name: "Pehlivan", lastName: "Pehlül", phone: "+90 333 9114821"},
{name: "Urbeyi", lastName: "Usberk", phone: "+90 333 1617245"}]

arr1-arr2

Result:

var result = [{name: "Kâmile", lastName: "Kâşife", phone: "+90 333 6784334"},
{name: "Akdoruk", lastName: "Akdöl", phone: "+90 333 4687455"}]

I want to get it.

_.difference in Underscore does not make it. How can I follow a method?

Erdem Aydemir
  • 389
  • 1
  • 6
  • 26

2 Answers2

1

If you want to find the difference between two objects you can try using the _.filter and _.findWhere functions:

var array1 = [{a: 1},{b: 2}];
var array2 = [{a: 1}];

_.filter(array1, function(obj){ return !_.findWhere(array2, obj); });
Joseph Cho
  • 4,033
  • 4
  • 26
  • 33
0

Not using _. but

var arr1 = [{name: "Yesügey", lastName: "Yeşil", phone: "+90 333 9695395"},{name: "Firdest", lastName: "Firdevis", phone: "+90 333 4234638"},{name: "Pehlivan", lastName: "Pehlül", phone: "+90 333 9114821"},{name: "Urbeyi", lastName: "Usberk", phone: "+90 333 1617245"},{name: "Kâmile", lastName: "Kâşife", phone: "+90 333 6784334"},{name: "Akdoruk", lastName: "Akdöl", phone: "+90 333 4687455"}]

var arr2 = [{name: "Yesügey", lastName: "Yeşil", phone: "+90 333 9695395"},{name: "Firdest", lastName: "Firdevis", phone: "+90 333 4234638"},{name: "Pehlivan", lastName: "Pehlül", phone: "+90 333 9114821"},{name: "Urbeyi", lastName: "Usberk", phone: "+90 333 1617245"}]


function compare(otherArray){
  return function(current){
    return otherArray.filter(function(other){
      return other.name == current.name && other.lastName == 
current.lastName && other.phone == current.phone
    }).length == 0;
  }
}

var onlyInFirst = arr1.filter(compare(arr2));
var onlyInSecond = arr2.filter(compare(arr1));

result = onlyInFirst.concat(onlyInSecond);

console.log(result);

This will work for your specific senario. If you need to use it for other arrays with different catagories, you will need to change the "return other.name == current.name" line to include your new array objects. Example

var arr1 = [{key1="value",key2="value"}]
var arr2 = [{key1="different value",key2 = "different value="}]

The return line would say.

return current.key1 == other.key1 && current.key2 = other.key2

Original answer. https://stackoverflow.com/a/21988185/8521346

Bigbob556677
  • 1,805
  • 1
  • 13
  • 38