如何检查一个对象是否是“;深空”;

How to check if an object is "deep empty"?

本文关键字:是否是 深空 一个对象 何检查 检查      更新时间:2024-05-08

我有一个方法,它返回一个包含4个对象的对象:

function getFiles() {
    var documents = {};
    documents.files1ToBeCompleted = DocumentsService.getFiles1Uncompleted();
    documents.files2ToBeCompleted = DocumentsService.getFiles2Uncompleted();
    documents.files3ToBeCompleted = DocumentsService.getFiles3Uncompleted();
    documents.files4ToBeCompleted = DocumentsService.getFiles4Uncompleted();
    return documents;
}

我试图使用Undercore函数._isEmpty来验证对象是否为空,我指的是我得到一个具有空子对象的对象的情况。但是,即使它的4个对象都是空的,它也不是空的,因为它包含4个项目。你知道有什么方法可以检查一个物体是否"深空"吗?

以下是对我有效的方法。它是递归的,可以处理所有嵌套对象(使用lodash)。

function isEmptyDeep(obj) {
  if(isObject(obj)) {
    if(Object.keys(obj).length === 0) return true
    return every(map(obj, v => isEmptyDeep(v)))
  } else if(isString(obj)) {
    return !obj.length
  }
  return false
}

它首先检查是否没有键,在这种情况下返回true。

然后它检查密钥,并在每个密钥上运行isEmptyDeep。如果该值是一个对象(或数组),它将继续递归。

如果有一个空数组或空字符串,则长度将为0,并且将被视为空。

如果该值是0false或其他错误值,则它将被视为不为空。如果你想将伪值视为空,这是上面函数中的第一行:

if(!obj) return true

感谢Bergi带领我找到了这个工作解决方案:

_.every(documentsObject, function(property) { return _.isEmpty(property); });

如果对象为"深空",则返回true,否则返回false