比较对象键值与 Null 的相等性
我使用以下代码来比较两个对象及其键值对以确保相等。它工作得很好,只是它不处理字段中的 null
值。我收到以下错误:TypeError:无法将 undefined 或 null 转换为对象
。
我如何增强它以支持 null
值以及为什么这不起作用。
预期行为示例:
const o1 = {id: 123, name: Brian}
const o2 = {id: 456, name: null}
const objectsEqual = (o1, o2) =>
typeof o1 === 'object' && Object.keys(o1).length > 0
? Object.keys(o1).length === Object.keys(o2).length
&& Object.keys(o1).every(p => objectsEqual(o1[p], o2[p]))
: o1 === o2;
objectsEqual(o1,o2)
//returns false
I'm using the following code to compare two objects and its key value pairs to assure equality. It works great except it doesn't handle null
values in fields. I get the following error: TypeError: Cannot convert undefined or null to object
.
How could I enhance this to support null
values and why does this not work.
Example of expected behavior:
const o1 = {id: 123, name: Brian}
const o2 = {id: 456, name: null}
const objectsEqual = (o1, o2) =>
typeof o1 === 'object' && Object.keys(o1).length > 0
? Object.keys(o1).length === Object.keys(o2).length
&& Object.keys(o1).every(p => objectsEqual(o1[p], o2[p]))
: o1 === o2;
objectsEqual(o1,o2)
//returns false
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您的代码的问题是“null 是 javascript 中的对象”
因此,当您说
typeof o1 === 'object'
时,它的计算结果为 true,然后它会尝试计算Object.keys(o1).length
并在此处抛出错误对此可以有一个最简单的解决方案
如果您想修复您的方法,那么您可以按如下方式更改它
The problem with your code is "null is an object in javascript"
So when you say
typeof o1 === 'object'
it evaluates to true, then it tries to evaluateObject.keys(o1).length
and throws error hereThere can be a simplest solution for this
If you want to fix your method, then you can change it as below