如何检查对象是否“深空”?

问题描述 投票:0回答:2

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

function getFiles() {
    var documents = {};

    documents.files1ToBeCompleted = DocumentsService.getFiles1Uncompleted();
    documents.files2ToBeCompleted = DocumentsService.getFiles2Uncompleted();
    documents.files3ToBeCompleted = DocumentsService.getFiles3Uncompleted();
    documents.files4ToBeCompleted = DocumentsService.getFiles4Uncompleted();

    return documents;
}

我正在尝试使用下划线函数._isEmpty来验证对象是否为空,我的意思是我得到一个带有空子对象的对象。但即使它的所有4个对象都是空的,它也不是空的,因为它包含4个项目。你知道有什么方法可以检查一个物体是否“深空”?

javascript object nested underscore.js is-empty
2个回答
0
投票

这对我有用。它是递归的并且负责所有嵌套对象(使用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。如果值是对象(或数组),它将继续递归。

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

如果该值为0false或其他虚假值,那么它将被视为非空。如果要将falsey值视为空,则将其作为上述函数中的第一行:

if(!obj) return true

-3
投票

感谢Bergi引导我找到这个有效的解决方案:

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

如果对象是“深空”,则返回true,否则返回false

© www.soinside.com 2019 - 2024. All rights reserved.