如何统计嵌套JavaScript对象中空属性的总数量
嵌套对象空属性数量统计方案
你之前使用的Object.keys(data).length只能统计当前层级的属性总数,不会递归遍历深层嵌套的对象/数组,因此无法统计到内层的空属性。可通过递归遍历所有层级属性的方式实现统计,实现代码如下:
基础实现(按示例空字符串判定为空)
// 空值判定规则:可根据自身需求调整判定逻辑 function isEmptyValue(value) { // 示例仅判定空字符串为空值 return value === '' } function countNestedEmptyProps(target) { let emptyCount = 0 // 遍历当前目标的所有自有属性 for (const key in target) { if (Object.prototype.hasOwnProperty.call(target, key)) { const currentVal = target[key] // 若当前值为非空的对象/数组类型,递归统计内层空属性 if (typeof currentVal === 'object' && currentVal !== null) { emptyCount += countNestedEmptyProps(currentVal) continue } // 基础类型值判定是否为空,符合条件则计数+1 if (isEmptyValue(currentVal)) { emptyCount++ } } } return emptyCount }
测试效果
用你提供的示例数据测试(修正语法错误后):
const testData = [{ "name": "test", "id" : "", "rating": { "title": "", "type": "book", "star": 2 } }] console.log(countNestedEmptyProps(testData)) // 输出结果为2,对应id、rating.title两个空字符串属性,符合预期
自定义空值规则扩展
如果需要将null、undefined、空数组等也判定为空属性,只需修改isEmptyValue的逻辑即可,示例:
function isEmptyValue(value) { // 空字符串、null、undefined判定为空 if (value === '' || value === null || value === undefined) return true // 空数组判定为空 if (Array.isArray(value)) return value.length === 0 // 空对象判定为空(按需开启) // if (Object.prototype.toString.call(value) === '[object Object]' && Object.keys(value).length === 0) return true return false }
内容的提问来源于stack exchange,提问作者8245734589
相关产品推荐
相关产品推荐

