过滤对象中值为空的数据项需先明确定义“空”(如null、undefined、''、[]、{}等),再用object.entries()+filter()+object.fromentries()链式处理;基础过滤仅剔除null/undefined/空字符串,进阶过滤可扩展isempty判断函数,完整支持需用reflect.ownkeys()兼顾symbol键与属性顺序。

过滤对象中值为空的数据项,关键在于明确“空”的定义(如 null、undefined、空字符串 ''、空数组 []、空对象 {} 等),再结合 Object.entries() + filter() + Object.fromEntries() 链式处理。
明确哪些值算“空”
不同业务场景对“空”的理解不同。常见判断逻辑包括:
-
null或undefined—— 明确无值 -
''(空字符串)—— 字符串类型下常需剔除 -
0和false是否算空?通常不算,它们是有意义的合法值(如分页第 0 页、开关关闭) -
[]和{}是否算空?视需求而定,可用Array.isArray()和Object.keys().length === 0判断
基础过滤:去除 null/undefined/空字符串
最常用场景,代码简洁安全:
const cleanObj = (obj) => {
return Object.fromEntries(
Object.entries(obj).filter(([, v]) => v != null && v !== '')
);
};
说明:v != null 等价于 v !== null && v !== undefined,是常用简写;!= 是安全的宽松比较,此处适用。
进阶过滤:同时排除空数组和空对象
若需更严格清理,可扩展判断逻辑:
const isEmpty = (val) => {
if (val == null) return true;
if (typeof val === 'string') return val.trim() === '';
if (Array.isArray(val)) return val.length === 0;
if (typeof val === 'object') return Object.keys(val).length === 0;
return false;
};
const cleanObjDeep = (obj) => {
return Object.fromEntries(
Object.entries(obj).filter(([, v]) => !isEmpty(v))
);
};
注意:trim() 处理带空白字符的字符串(如 ' ');对 number、boolean、function 等类型直接返回 false,不误删。
保留原始键顺序 & 兼容 Symbol 键
Object.entries() 会忽略 Symbol 键,且不能保证所有引擎下严格按插入顺序(尽管现代引擎基本支持)。如需完整支持:
- 用
Reflect.ownKeys(obj)获取所有键(含 Symbol 和不可枚举属性) - 手动遍历过滤,再用
reduce构建新对象
const cleanObjFull = (obj) => {
return Reflect.ownKeys(obj).reduce((acc, key) => {
const val = obj[key];
if (val != null && !(typeof val === 'string' && val.trim() === '')) {
acc[key] = val;
}
return acc;
}, {});
};大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











