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

如何从扁平JS对象中移除空/null/undefined值对应的键

从扁平对象中移除空值键的实现方案

原有方案失效原因

你之前尝试的两种写法都没有覆盖完整的空值判断逻辑:

  • 第一种写法的判断条件obj[k] != null仅能过滤null和undefined两种值,无法识别空对象{},因此示例中三个值为空对象的键会被完整保留,达不到过滤效果。
  • 第二种写法JSON.parse(JSON.stringify(obj))的作用是对对象做深拷贝,本身不带任何空值过滤逻辑,执行后得到的是和原对象完全一致的副本,自然无法满足需求。

适配当前场景的实现代码

针对你给出的扁平对象场景,只需要在遍历时补充空对象的判断规则即可,不需要额外引入第三方依赖:

function filterEmptyKeys(obj) {
  return Object.keys(obj).reduce((result, key) => {
    const val = obj[key];
    // 跳过null、undefined
    if (val == null) return result;
    // 跳过空对象
    if (
      typeof val === 'object'
      && !Array.isArray(val)
      && Object.keys(val).length === 0
    ) return result;

    result[key] = val;
    return result;
  }, {});
}

// 测试用例
const originObj = {
  "Gender": "male",
  "SiteId": -99,
  "LastName": "Bobby",
  "BirthDate": "2000-01-15T06:00:00.000Z",
  "FirstName": "Ricky",
  "HomeLocation": {},
  "ClientCreditCard": {},
  "CustomClientFields": {}
};

const filteredObj = filterEmptyKeys(originObj);
/*
filteredObj 输出结果:
{
  Gender: 'male',
  SiteId: -99,
  LastName: 'Bobby',
  BirthDate: '2000-01-15T06:00:00.000Z',
  FirstName: 'Ricky'
}
*/

如果后续需要扩展过滤规则,比如过滤空字符串、空数组,直接在判断分支里追加对应逻辑即可:

  • 过滤空字符串:增加判断val === ''
  • 过滤空数组:增加判断Array.isArray(val) && val.length === 0

数据操作学习建议

  • 优先吃透JavaScript原生Object、Array的内置方法,日常绝大多数对象、数组处理需求都可以通过原生方法实现,不需要依赖外部库
  • 如果经常遇到复杂的数据转换、清洗场景,可以熟悉Lodash的常用工具函数,结合实际业务场景练习即可,不需要专门购买课程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 22:09:49