先剔除null和undefined再用set去重:arr.filter(item => item != null).map(v => [...new set(v)]),可保留0、false、""等合法值,避免误删。

JavaScript 数组去重时,若想同时过滤掉 undefined 和 null,关键在于:先剔除无效值,再对剩余有效值去重。不能只靠 Set 简单处理,因为 Set 会把 null 和 undefined 当作合法值保留。
先过滤再去重(推荐)
最清晰、可读性最强的方式是分两步:用 filter 剔除 null 和 undefined,再用 Set 去重。
-
filter(Boolean)可以过滤所有假值(包括false、0、""),但如果你只想排除null和undefined,应显式判断: -
arr.filter(item => item != null)—— 利用!= null同时排除null和undefined(不严格等于,但语义准确且简洁) - 之后转为
Set再转回数组:[...new Set(filteredArr)]
示例:
const arr = [1, null, 2, undefined, 1, 'a', null, 'a'];const unique = [...new Set(arr.filter(item => item != null))];
// → [1, 2, "a"]
一行写法(兼顾健壮性)
如果追求简洁且不想误删 0、false、空字符串等合法值,用下面这行即可:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
它明确排除仅这两个值,其他(包括 0、false、"")都会保留并参与去重。
注意 NaN 和对象的特殊情况
Set 对 NaN 是友好的(自动去重),但对对象或数组仍按引用比较:
-
[...new Set([NaN, NaN])]→[NaN](正常) -
[...new Set([{a:1}, {a:1}])]→ 仍是两个对象(因引用不同) - 如需深去重对象,需额外实现(如用
JSON.stringify或库)
避免常见坑
别用 filter(x => x) 或 filter(Boolean) 如果数组中可能含 0、false、"" —— 它们也会被误删。
也别依赖 arr.filter(v => v != null || v == 0) 这类补丁逻辑,容易出错;明确意图更安全。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










