filter剔除空值需按业务定义“无效”:最安全是删null/undefined/nan/'',保留0/false;全删falsy值用boolean;复杂类型可结合typeof/object.keys;嵌套结构需自定义校验逻辑。

用 filter 剔除数组中的空值和无效项,核心是传入一个“返回 true 才保留”的判断函数。关键在于准确识别哪些值算“空”或“无效”,避免误删(比如 0、false、'' 是否该删需按业务定)。
只剔除 null、undefined、NaN 和空字符串
这是最常见也最安全的清理方式,保留 0、false、'' 以外的“falsy”值(因为它们可能有业务含义):
const arr = [1, '', null, 'hello', undefined, 0, false, NaN, 'world']; const cleaned = arr.filter(item => item !== null && item !== undefined && item !== '' && !Number.isNaN(item) ); // → [1, 'hello', 0, false, 'world']
剔除所有 falsy 值(含 0、false、'' 等)
如果明确不需要任何 falsy 值(比如纯字符串列表、ID 列表),可直接用 Boolean 转换:
const arr = [1, '', null, 'hi', 0, false, undefined, 'ok']; const cleaned = arr.filter(Boolean); // 等价于 item => Boolean(item) // → [1, 'hi', 'ok']
注意:Boolean(0) 是 false,Boolean(false) 也是 false,所以它们都会被过滤掉。
按类型精准剔除(推荐用于复杂数据)
当数组里混着对象、数字、字符串等,且只想清除特定“无效对象”时,可结合 typeof 或 Object.keys() 判断:
- 剔除空对象:
item => !(item && typeof item === 'object' && Object.keys(item).length === 0) - 剔除空数组:
item => !(Array.isArray(item) && item.length === 0) - 组合使用:
arr.filter(item => item != null && !(typeof item === 'object' && Object.keys(item).length === 0))
处理嵌套结构或需额外校验的场景
例如数组中是用户对象,要剔除 name 为空或 id 无效的项:
const users = [
{ id: 1, name: 'Alice' },
{ id: 0, name: '' },
{ id: null, name: 'Bob' },
{ id: 2, name: ' ' }
];
const validUsers = users.filter(u =>
u &&
typeof u === 'object' &&
u.id &&
typeof u.name === 'string' &&
u.name.trim()
);
// → [{ id: 1, name: 'Alice' }]
这里用了 trim() 防止纯空格字符串被误认为有效。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











