Javascript 检查对象是否只包含空对象
我正在寻找一种方法来深入判断一个对象是否只由空对象组成 例如,对于以下每个对象,该方法都应返回true:Javascript 检查对象是否只包含空对象,javascript,node.js,Javascript,Node.js,我正在寻找一种方法来深入判断一个对象是否只由空对象组成 例如,对于以下每个对象,该方法都应返回true: const obj1 = {}; const obj2 = { a: {} b: {} c: {} }; const obj3 = { a: { a1: {} }, b: { b1: {}, b2: {} }, c: { c1: {}, c2:
const obj1 = {};
const obj2 = {
a: {}
b: {}
c: {}
};
const obj3 = {
a: {
a1: {}
},
b: {
b1: {},
b2: {}
},
c: {
c1: {},
c2: {},
c3: {}
}
};
对于以下对象,它应该返回false:
const obj4 = {
a: {
a1: {}
},
b: {
b1: {},
b2: {}
},
c: {
c1: {},
c2: {},
c3: {
x: 5
}
}
};
我想到的最简单的方法是:
function isEmpty(object) {
return typeof object === 'object' &&
Object.keys(object).every(key => isEmpty(object[key]));
}
我找不到任何反例,所以我想问一下这个方法是否有任何缺陷。实际上,您可以使用递归函数。以下是您可以考虑的一些更改:
- 确保地址
正确(其null
为“object”!)typeof
- 使用
而不是Object.values
,以便Object.keys
- 您可以按原样将函数引用传递给
回调每个
- 可以使用表达式语法将其设置为箭头函数
任何
null
都将导致类型错误,因为null
是类型“object”,但它没有keys()
方法
const obj2={
a:{},
b:{},
c:{
d:空
}
};
函数isEmpty(对象){
返回对象的类型===“对象”&&
key(Object).every(key=>isEmpty(Object[key]);
}
log(isEmpty(obj2));
//TypeError:null不是对象(计算'object.keys(object)
我只想指出,从技术上讲,只有obj1
是真正的空对象。其余的示例并不只包含空对象。例如,obj3
对象包含三个不是空对象的属性。它们内部确实有属性。尽管如此,我知道你的意思。只是想指出可能存在的歧义;)@SebastianKaczmarek:这就是为什么我明确地写了,不管一个对象是否由空对象组成
(无论是在问题的标题中还是在开场白中)。这是否是SE代码审查网站的一个很好的候选者?请注意,我们更喜欢这里的技术风格。我们轻轻地劝阻问候,希望你能帮助,谢谢,提前感谢,感谢信,问候,亲切的问候,签名,请你能帮助,闲聊的材料和缩写的txtspk,恳求,你被困多久了,投票建议,元评论等。只需解释你的问题,并展示你已经尝试了什么,你期望什么,实际上发生了什么。Object(obj)==obj
相当于typeof Object===“Object”
,除了null
?事实上,就像你说的那样。从keys()
切换到values()
是个好主意!啊,我看到你刚刚在一个子弹里加上了那一点。哦,你的意思是,这是我应该考虑的问题。知道了!再次非常感谢:)
const isDeepEmpty = obj => Object(obj) === obj &&
Object.values(obj).every(isDeepEmpty);