我有一个返回包含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个项目。
你知道有什么方法可以检查一个物体是否“深空”?
答案 0 :(得分: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。如果该值是一个对象(或数组),它将继续递归。
如果有一个空数组或空字符串,则长度将为0,并将被视为空。
如果该值为0
,false
或其他虚假值,则将其视为不为空。如果您想将虚假值视为空,则将其作为上述函数的第一行:
if(!obj) return true
答案 1 :(得分:-3)
感谢Bergi引导我找到这个有效的解决方案:
_.every(documentsObject, function(property) { return _.isEmpty(property); });
如果对象为“深空”,则返回true
,否则返回false
。