我使用lodash来比较以下两个对象:
obj1 = {
"_id": "57767",
"Re": {
"PropertyTypes": [
{
"AllocationID": 13870,
"Percentage": null,
"Type": "Hotels",
"Value": null
},
{
"AllocationID": 13867,
"Percentage": null,
"Type": "Industrial",
"Value": null
}
]
}
}
obj2 = {
"_id": "57767",
"Re": {
"PropertyTypes": [
{
"AllocationID": 13867,
"Percentage": null,
"Type": "Industrial",
"Value": null
},
{
"AllocationID": 13870,
"Percentage": null,
"Type": "Hotels",
"Value": null
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
我发现使用isEqual(obj1, obj2),比较失败,使用isMatch(obj1, obj2),则效果很好。
我想知道 和 是否isEqual以isMatch完全相同的方式工作,除了在这种情况PropertyTypes下忽略数组元素的顺序这一事实之外isMatch。我在isMatch 的文档中没有找到此信息。
不确定“以完全相同的方式工作”是什么意思,但这是我的理解:
_.isMatch并_.isEqual共享相同的内部逻辑,使用显式的部分和无序_isMatch标志调用所述底层逻辑(所以我想我们可以说它们的工作方式完全相同)_isMatch用于断言输入对象(例如配置)至少可能事先没有完全正确地成形,而_.isEqual处理最纯粹、最严格的比较obj1 = {
a: 123,
b: 456,
c: 789
};
obj2 = {
a: 123,
b: 456
}
_.isMatch(obj1, obj2); // true, `c` wasn't "asserted"
_.isMatch(obj2, obj1); // false, missing value for `c`
Run Code Online (Sandbox Code Playgroud)
将其扩展到更接近您的情况的示例,因为这是一个深入的比较:
obj1 = {
PropertyTypes: [{
id: 13867
}, {
id: 13870
}]
};
obj2 = {
PropertyTypes: [{
id: 13867
}, {
id: 13870
}, {
id: 11111
}]
};
_.isMatch(obj1, obj2); // false, missing 11111 value
_.isMatch(obj2, obj1); // true, even though there's one more item in the array
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
4650 次 |
| 最近记录: |