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

时间:2017-09-02 13:00:25

标签: javascript angularjs underscore.js

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

阵列及其当前值在图像中调试。

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

的$$ hashkey

enter image description here

2 个答案:

答案 0 :(得分:2)

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

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

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

重要的是要注意两个数组的元素需要处于相同的顺序。这将返回false:

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

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

<强>更新

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

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

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

答案 1 :(得分:2)

而不是lodash或javascript,angularjs中的方法来检查两个对象的相等性:public class House_main : MonoBehaviour { public string owner; private House_goods goods; void Start () { // obj (goods) is not null goods = this.transform.Find("House_goods").GetComponent<House_goods>(); // i can use // goods.AddAmountToGoodByName (value, name); } public void UpdateGoodInfo (int value, string name) { // obj (goods) is null goods.AddAmountToGoodByName (value, name); } } &amp;可以按如下方式使用:

angular.equals

由于它有角度的自己的平等检查,因此它没有问题,因为它将处理它(通过不检查)。此外,它还通过属性值检查所有属性的相等性,同时进行类型检查。

Plunker Example