_.difference 检查对象引用或通过 属性 检查 属性?

_.difference checks for object reference or checks property by property?

我有两个数组,我需要检查它们的内容是否相等(属性 by 属性)

图像中调试了数组及其当前值。

建议任何 loadash 函数或 javascript 函数来检查深度相等性,这将排除数组的 $$hashkey

您可以使用 Lodash 的 _.isEqual 函数。此函数将比较数组中对象的所有属性。

var obj = [{ 'a': 1, b: 2 },{ 'a': 3, b: 4 }];
var other = [{ 'a': 1, b: 2 }, { 'a': 3, b: 4 }];

_.isEqual(对象,其他); // => 真

重要的是要注意两个数组的元素需要以相同的顺序排列。这将 return 错误:

var obj = [{ 'a': 1, b: 2 },{ 'a': 3, b: 4 }];
var other = [{ 'a': 3, b: 4 },{ 'a': 1, b: 2 }];

_.isEqual(对象,其他); // => 假

更新

使用 _.isEqual 时,您需要有两个顺序相同的数组。但是为了克服这种有序比较,你可以使用其他 lodash 函数,所以在你的情况下你可以这样使用(使用 sortBy):

_.isEqual(_.sortBy(obj, 'id'), _.sortBy(other, 'id'));

这将首先按 id 对数组进行排序,然后验证数组是否相等。您也可以按多个属性或自定义函数排序。

代替 lodash 或 javascript,angularjs 中有方法检查两个对象是否相等:angular.equals & 可以按如下方式使用:

angular.equals(newValue, oldValue);

因为它是 angular 自己的相等性检查,它对 $$hashkey 没有问题,它会处理(通过不检查)。此外,它还会检查所有 属性 与 属性 值是否相等,并进行类型检查。

Plunker Example