代码之家  ›  专栏  ›  技术社区  ›  Luca Reghellin

如何检查对象是否为空(深)?

  •  0
  • Luca Reghellin  · 技术社区  · 6 年前

    拿着这个:

    var lists:{
      item1:{}
      ,item2:{}
      ,item3:{}
      ,item4:{}
    }
    

    因为它基本上是空的,所以我想要一个函数(可能但不一定是lodash函数)来检查它并说它是空的。

    有点像

    is_empty(lists) // >> true (because every property resolves to an empty object)
    

    如何?

    2 回复  |  直到 6 年前
        1
  •  3
  •   Leonid Pyrlia    6 年前

    您可以迭代对象的值并检查它们是否都为空:

    var lists = {
      item1:{},
      item2:{},
      item3:{},
      item4:{}
    }
    
    //ES6:
    function isEmpty(obj) {
        return Object.keys(obj).every(k => !Object.keys(obj[k]).length)
    }
    
    console.log(isEmpty(lists));
    
    // ES5
    function isEmpty(obj) {
        return Object.keys(obj).every(function(k) {
            return !Object.keys(obj[k]).length}
        )
    }
    
    console.log(isEmpty(lists));
    
        2
  •  2
  •   CertainPerformance    6 年前

    如果 lists 始终是对象的对象,可以使用 Object.values 并检查每个值(内部对象)是否没有键:

    const isEmpty = outer => Object.values(outer).every(
      inner => Object.keys(inner).length === 0
    );
    
    var lists = {
      item1:{}
      ,item2:{}
      ,item3:{}
      ,item4:{}
    }
    var lists2 = {
      item1:{}
      ,item2:{}
      ,item3:{}
      ,item4:{}
      ,item5:{ foo: 'bar' }
    }
    console.log(isEmpty(lists));
    console.log(isEmpty(lists2));