2个对象之间的数组差异

时间:2017-08-29 13:46:05

标签: javascript underscore.js

我希望得到第一个数组和第二个数组之间的区别。结果;

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"}]

ARR1-ARR2

结果:

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

我想得到它。

_。在Underscore中的差异没有成功。我该如何遵循方法?

2 个答案:

答案 0 :(得分:1)

如果要查找两个对象之间的差异,可以尝试使用_.filter和_.findWhere函数:

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

_.filter(array1, function(obj){ return !_.findWhere(array2, obj); });

答案 1 :(得分:0)

不使用_。但

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);

这适用于您的特定场所。 如果您需要将其用于具有不同类别的其他数组,则需要更改"返回other.name == current.name"包含新数组对象的行。 示例

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

回程线会说。

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

原始答案。 https://stackoverflow.com/a/21988185/8521346