我有两个对象数组:
array1 = [
{ name: 'Kitty, Hello',
otherNames: [ '(1) One', '(2) Two' ]
},
{ name: 'Cat, Garfield',
otherNames: [ '(3) Three' ]
}
];
array2 = [
{ name: 'Kitty, Hello',
otherNames: [ '(2) Two', '(1) One' ]
},
{ name: 'Cat, Garfield',
otherNames: [ '(3) Three' ]
}
]
字符串
我试图使用Chai来查看它们是否相等,尽管otherNames
在array1
和`array2中的顺序不同。
我试过:
array1.to.be.eql(array2) //false
array1.to.have.deep.members(array2) //false
型
但是它总是返回false。这可能吗?我试过看类似的问题,但是我只能找到“name”和“otherNames”顺序不同的问题。
3条答案
按热度按时间4bbkushb1#
它们不相等,因为它们在数组中有不同的值。你可以对数组进行排序,然后检查它们是否相等。
字符串
这个函数很好,因为您可以将它链接到多个属性(例如,如果您想要验证
otherNames
和otherAges
数组,则可以调用getSortedAtKey(getSortedAtKey(array1), 'otherAges')
nfs0ujit2#
有一个软件包。https://www.npmjs.com/package/deep-equal-in-any-order
字符串
nx7onnlm3#
如果最初的帖子是最近的,我会建议@webdesignnoob重新考虑他的设计。广义上说,这个问题涉及到对象之间的等价概念。
在@ut8pia/classifier库中,等价可以通过表示函数来实现:
字符串
该库声称解决了JavaScript中对排序集合的长期需求。有关详细解释,请参阅online documentation。