You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何统计嵌套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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 07:45:01