Javascript 检查对象是否只包含空对象

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:

我正在寻找一种方法来深入判断一个对象是否只由空对象组成

例如,对于以下每个对象,该方法都应返回true:

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
    正确(其
    typeof
    为“object”!)
  • 使用
    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);