如何检查一个对象是否是“;深空”;
How to check if an object is "deep empty"?
我有一个方法,它返回一个包含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,并且将被视为空。
如果该值是0
、false
或其他错误值,则它将被视为不为空。如果你想将伪值视为空,这是上面函数中的第一行:
if(!obj) return true
感谢Bergi带领我找到了这个工作解决方案:
_.every(documentsObject, function(property) { return _.isEmpty(property); });
如果对象为"深空",则返回true
,否则返回false
。
相关文章:
- node.js测试事件是否是在不使用超时的情况下使用sinon.js发出的
- 确定var是否是javascript中的elementFinder对象的方法是什么
- 检查对象是否是mongo游标
- 是否可以测试javascript函数是否是构造函数
- 检查请求的用户是否是django中的所有者
- 在Javascript中,检查一个区域中的所有像素是否都为空
- 角度 2 :检查路由名称是否是当前名称
- 我怎么知道日期是否是星期六
- 从不断变化的动作创建者那里获取商店数据是否是一种常见的做法
- 在node.js/ssocket.io中,如何判断对象是否是套接字的实例
- 在jQuery中,如何测试一个元素是否是同一类的多个元素中的第一个
- 是否有跨浏览器和跨框架的方法来检查对象是否是HTML元素
- 如何判断页面是否是从fetch()调用的
- Node.js如何知道回调的第一个参数是否是错误处理程序
- 如何检查一个对象是否是“;深空”;
- javascript测试一个值是否是一个数字和一个大于0的数字
- jqueryangularjs如何知道鼠标按下事件是否是由浏览器的滚动条触发的
- 如何检查具有类的元素是否是该类的第一个子元素
- Facebook已连接但我的用户是一个空对象
- 检查js函数的所有参数是否为非空,最有效/最常见的方法是什么