我有一个方法返回一个包含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个项目。你知道有什么方法可以检查一个物体是否“深空”?
这对我有用。它是递归的并且负责所有嵌套对象(使用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并将被视为空。
如果该值为0
,false
或其他虚假值,那么它将被视为非空。如果要将falsey值视为空,则将其作为上述函数中的第一行:
if(!obj) return true
感谢Bergi引导我找到这个有效的解决方案:
_.every(documentsObject, function(property) { return _.isEmpty(property); });
如果对象是“深空”,则返回true
,否则返回false
。