如何修改useClearEmptyAttributes函数实现同时过滤空字符串和空数组
问题原因
你当前的过滤逻辑依赖JS的隐式布尔转换,空数组[]在JS中属于真值,因此不会被原有逻辑过滤。
修改后的函数
export const useClearEmptyAttributes = ( obj: { [s: string]: unknown } | ArrayLike<unknown>, ) => { return Object.fromEntries( Object.entries(obj).filter(([_, v]) => { // 空数组直接过滤,其余值保留原有真值判断逻辑 return v && !(Array.isArray(v) && v.length === 0); }) ); };
逻辑说明
- 保留了你原有逻辑对假值(空字符串、null、undefined、false、0等)的过滤能力
- 新增数组类型校验:如果值是数组且长度为0,会被判定为需要过滤的无效值
效果验证
传入测试对象:
const testObj = { "phone number": "", socialLinks: [], name: "张三", hobbies: ["看书", "编码"] }
调用函数后返回结果为:
{ name: "张三", hobbies: ["看书", "编码"] }
完全符合你的过滤需求。
可选扩展(后续如果需要过滤空对象可使用)
如果后续需要同时过滤空对象{},可以调整过滤条件为:
.filter(([_, v]) => { if (!v) return false; if (Array.isArray(v)) return v.length > 0; if (typeof v === 'object' && v !== null) return Object.keys(v).length > 0; return true; })
内容的提问来源于stack exchange,提问作者Marinescu
相关产品推荐
相关产品推荐

