如何在两个对象之间进行无序比较/数组(arrays)?

JoMas971
创建于
2016-03-10 14:45:14

你好,

我在想,我们如何才能在两个复杂的实体之间进行无序比较。

例如:

var o1 = {
    id: 1,
    children: [{ a: 1, b: 2 },  { a: 3, b: 4}]
};
var o2 = {
    id: 1,
    children: [{ a: 3, b: 4 },  { a: 1, b: 2}]
};

_.isEqual(o1, o2, UNORDERED_COMPARE_FLAG);
// Should return true.

// Same should apply to these simple objects
var o1 = {id: 1, a: 1};
var o2 = {a: 1, id: 1};

_.isEqual(o1, o2, UNORDERED_COMPARE_FLAG);
// This should return true.

这两个数组(arrays)在属性/值方面绝对相等,唯一的区别是对象的排序(order)/数组(arrays)。

实际上,_.isEqual()_.isEqualWith()函数似乎没有使用这种行为。
但是在看了一点代码之后,我在那里看到了一些有趣的东西!就像使用bitmask参数的baseIsEqualDeep()函数(function)。
为什么此选项不向_.isEqual()_.isEqualWith()函数公开?

谢谢你。

3条回答
jdalton
回复于
2016-03-10 14:54:18
#1

您可以执行类似于_.isMatch(o1, o2)的操作,它执行无序的部分匹配。缺点是它是部分匹配,所以更宽容一些。为了得到你想要的,你可以组合_.isEqualWith+_.isMatch

JoMas971
回复于
2016-03-10 15:13:27
#2

谢谢!这正是我要找的!:-)

回复于
2019-01-19 06:50:04
#3

此线程已自动锁定,因为在它关闭后没有任何最近的活动。请为相关错误打开一个新的issue。

当前位于第1页,总计3条回复

基本信息

  • 回复数:329
  • 讨论框架:lodash
  • 原始内容:查看信息
  • 最后更新于:2020-10-23