【问题标题】:_.isEqual reporting a difference when there is none_.isEqual 在没有差异时报告差异
【发布时间】:2015-09-11 06:01:45
【问题描述】:

我正在尝试使用 lodash-node 包中的 .isEqual 方法比较两个对象。即使对象相同,.isEqual 也会返回 false

var _ = require('lodash-node');

var obj1 = {"properties":{"property":[{"comfort":["2.4 GHz"]},{"name":["Mosaic"]}]}};
var obj2 = {"properties":{"property":[{"name":["Mosaic"]},{"comfort":["2.4 GHz"]}]}};

if(_.isEqual(obj1, obj2)) //--> Returns false
    console.log('same')
else
    console.log('not same');

节点:- v0.12.7
lodash节点:- v3.10.1

这些物体看起来和我很相似。请帮忙指出是否有任何区别。

【问题讨论】:

    标签: lodash


    【解决方案1】:

    对象并不相等,因为即使在深度比较时,数组也是有序集合,并且顺序很重要。您的数组包含相同的值,但顺序不同。

    【讨论】:

    • 啊,对。我错过了。让我在进行深度比较之前对数组进行排序。感谢您的帮助。
    【解决方案2】:

    数组中的顺序很重要,所以

    _.isEqual([1,2], [2, 1]) === false
    

    这就是您的示例返回 false 的原因。

    【讨论】:

    • 谢谢丹尼尔。我错过了那一点。
    【解决方案3】:

    我意识到这不适用于您的示例,但我发现了另一种情况,即 lodash 返回不等于 JSON.stringify 返回相同字符串的对象。

    在我的例子中,一个对象有一个值为 undefined 的属性,而另一个对象根本没有那个属性。

    就个人而言,我认为 lodash 在这种情况下是不正确的,但它有点主观。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-27
      • 1970-01-01
      • 2012-11-03
      • 2011-07-24
      • 2011-01-05
      • 1970-01-01
      • 1970-01-01
      • 2015-02-22
      相关资源
      最近更新 更多