如果它们具有函数,如何比较两个对象是否相等?lodash的isEqual工作非常好,直到函数被抛出:
_.isEqual({
a: 1,
b: 2
}, {
b: 2,
a: 1
});
// -> true
_.isEqual({
a: 1,
b: 2,
c: function () {
return 1;
}
}, {
a: 1,
b: 2,
c: function () {
return 1;
}
});
// -> false
Run Code Online (Sandbox Code Playgroud)
您确定要比较功能吗?如果您只关心比较不是函数的每个属性,那么使用lodash很容易做到:
var o1 = { a: 1, b: 2, c: function() { return 1; } },
o2 = { a: 1, b: 2, c: function() { return 1; } };
_.isEqual(o1, o2)
// ? false
_.isEqual(_.omit(o1, _.functions(o1)), _.omit(o2, _.functions(o2)));
// ? true
Run Code Online (Sandbox Code Playgroud)
该功能()函数返回功能属性的列表,并使用省略() ,你可以摆脱他们。
这是我尝试的:
_.isEqual(o1, o2, function(val1, val2) {
if(_.isFunction(val1) && _.isFunction(val2)) {
return val1.toString() === val2.toString();
}
})
Run Code Online (Sandbox Code Playgroud)
Lodash支持一个customizer允许您编写自己的相等性检查的功能。这似乎是一个很好的测试,可以查看功能是否逐个字符相同。
| 归档时间: |
|
| 查看次数: |
6944 次 |
| 最近记录: |