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

如何用JavaScript递归函数获取带层级的空/Null/Undefined字段?

递归提取对象中空值字段并保留层级结构

问题场景

需要从嵌套对象中提取所有值为""、null或undefined的字段,同时完整保留原有的层级结构,而非扁平化结果。

解决方案代码

function getEmptyFields(obj) {
  const result = {};

  for (const key in obj) {
    if (!obj.hasOwnProperty(key)) continue;
    
    const value = obj[key];
    const isTargetEmpty = value === "" || value === null || value === undefined;

    // 处理嵌套对象
    if (typeof value === "object" && value !== null) {
      const nestedEmptyFields = getEmptyFields(value);
      // 仅当嵌套结果非空时才加入,避免冗余空对象
      if (Object.keys(nestedEmptyFields).length > 0) {
        result[key] = nestedEmptyFields;
      }
    } 
    // 处理目标空值字段
    else if (isTargetEmpty) {
      result[key] = value;
    }
  }

  return result;
}

代码说明

  1. 初始化结果容器:创建空对象result存储最终的层级化结果。
  2. 遍历对象属性:使用for...in遍历对象,通过hasOwnProperty过滤原型链属性,只处理对象自身字段。
  3. 空值判断:定义isTargetEmpty标识当前值是否为需要提取的空值类型。
  4. 递归处理嵌套对象:如果当前值是对象且不为null,递归调用函数处理嵌套对象;只有当递归返回的结果非空时,才将其添加到result中,避免生成无意义的空对象。
  5. 收集目标字段:如果当前值是目标空值,直接将键值对加入result。

示例测试

输入对象

const sampleData = {
  name: "",
  age: null,
  address: {
    street: undefined,
    city: "New York",
    zip: ""
  },
  contacts: {
    email: "test@example.com",
    phone: null
  }
};

调用函数

const emptyFields = getEmptyFields(sampleData);
console.log(emptyFields);

输出结果

{
  name: "",
  age: null,
  address: {
    street: undefined,
    zip: ""
  },
  contacts: {
    phone: null
  }
}

该实现完美保留了原对象的层级结构,仅保留符合条件的空值字段。

内容的提问来源于stack exchange,提问作者Grewal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 08:20:26