_.isEqual在没有时报告差异

Smr*_*dal 4 lodash

我试图使用.isEquallodash-node包中的方法比较两个对象.即使对象相同,.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');
Run Code Online (Sandbox Code Playgroud)

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

对象看起来与我类似.请指出是否有任何区别.

Ami*_*mit 7

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


And*_*ndy 6

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

就我而言,一个对象具有一个具有该值的属性undefined,而另一个对象根本没有该属性。

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


Dan*_*rez 5

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

_.isEqual([1,2], [2, 1]) === false
Run Code Online (Sandbox Code Playgroud)

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