如何从扁平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
相关产品推荐
相关产品推荐

