javascript数组去重并过滤空白字符串需先用trim()清理再判断是否为空,再用set去重;对混合类型要先typeof判断再操作,避免报错,确保null/undefined被正确排除。

JavaScript 数组去重时,若想同时过滤掉空白字符项(如空字符串 ""、只含空格的字符串 " "、制表符、换行符等),不能只用简单的 Set 或 filter + indexOf,需先清理“无效字符串”,再做去重。
先 trim 再判断是否为空,然后去重
核心思路:对每个字符串元素执行 trim(),再判断是否为真值(非空字符串),最后用 Set 或其他方式去重。
- 推荐写法(简洁安全):
const arr = ["a", "", "b", " ", "a", "\t\n", "c"]; const uniqueNonEmpty = [...new Set(arr.filter(item => typeof item === 'string' ? item.trim() : item))];
⚠️ 注意:上面会保留非字符串类型(如 0、false、null)——如果数组混合了多种类型,且你只想过滤“字符串类空白”,需更精确判断:
严格过滤字符串类空白项(含空格、制表、换行等)
使用正则或 trim() 判断字符串是否“视觉上为空”:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 用
String(item).trim()转换并去首尾空白,再判空; - 避免
item.trim()对非字符串报错(如null、undefined); - 去重建议用
Set,它对原始值(string/number/boolean)天然去重,对对象需另处理。
const arr = ["a", "", "b", " ", "a", null, undefined, " \t\n ", 0, false];
const uniqueClean = [...new Set(
arr.filter(item =>
typeof item === 'string' ? item.trim() !== '' : item != null && item !== ''
)
)];
✅ 结果:["a", "b", 0, false] —— 字符串空白被剔除,其他类型按需保留。
如果还要保持原始顺序且兼容对象/复杂值
当数组含对象或想完全自定义“空白”逻辑(比如也过滤 "N/A"、"--" 等),可用 reduce 手动控制:
- 遍历中先清洗(如
cleanValue = typeof x === 'string' ? x.trim() : x); - 用
Map或数组记录已见的 clean 值,跳过重复项; - 注意:对象无法用
===直接比较,需用JSON.stringify(仅限简单可序列化对象)或深比较库。
const arr = ["a", " ", "a", "b", ""];
const seen = new Set();
const result = arr.filter(item => {
const cleaned = typeof item === 'string' ? item.trim() : item;
if (cleaned === '' || cleaned == null) return false;
if (seen.has(cleaned)) return false;
seen.add(cleaned);
return true;
}); // → ["a", "b"]
小结:关键点
-
空白字符串 ≠ falsy:空字符串
""是 falsy,但" "不是,必须用trim(); -
类型安全第一:对可能非字符串的项,先
typeof判断,再操作,避免Cannot read property 'trim' of null; -
去重与过滤分两步更清晰:先
filter清理,再Set或filter + indexOf去重; -
注意 null/undefined 的处理逻辑:它们不是字符串,
String(null).trim()是"null",通常应显式排除。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










