Array.from 本身不直接去重或排序,但能配合 Set 和 sort 实现“去重+排序”:用 Array.from(new Set(arr)) 去重并保持顺序,再链式调用 sort((a,b)=>a-b) 实现数字升序,字符串则用 sort() 或 localeCompare。

Array.from 本身不直接去重或排序,但它能配合 Set 和 sort 方法,简洁实现“去重+排序”一步到位。
用 Array.from + Set 快速去重
Set 自动去除重复值,Array.from 把 Set 转回数组,这是最轻量的去重方式:
-
写法简单:
Array.from(new Set([1, 2, 2, 3, 1]))→[1, 2, 3] - 保持原始顺序: Set 遍历按插入顺序,所以结果不会打乱原数组元素首次出现的顺序
-
兼容性好: 所有支持 ES6 的环境都可用,比
[...new Set(arr)]更显式、语义清晰
组合 sort 实现去重并升序排列
去重后直接链式调用 sort,注意数字排序要传比较函数,否则会按字符串排序:
-
数字升序:
Array.from(new Set([3, 1, 2, 2, 1])).sort((a, b) => a - b)→[1, 2, 3] -
字符串升序:
Array.from(new Set(['b', 'a', 'a'])).sort()→['a', 'b'] -
避免陷阱: 不传回调函数时,
sort()会把数字转成字符串比较,[10, 2].sort()得到[10, 2](因为 '10'
一行代码搞定去重+排序(实用封装)
可封装成可复用的小函数,支持数字/字符串,自动判断类型:
立即学习“Java免费学习笔记(深入)”;
-
基础版(默认数字):
const uniqueSort = arr => Array.from(new Set(arr)).sort((a, b) => a - b); -
增强版(智能判断):
const uniqueSort = arr => Array.from(new Set(arr)).sort((a, b) => typeof a === 'string' ? a.localeCompare(b) : a - b); -
注意点: 如果数组混合类型(如
[1, '1', 2]),Set 仍会保留两者(1 !== '1'),需提前统一类型再处理
和扩展运算符对比:选哪个?
Array.from(new Set(arr)) 和 [...new Set(arr)] 效果一致,但略有差异:
-
语义明确:
Array.from表达“从类数组或可迭代对象构造新数组”,意图更清晰 -
可扩展性强:
Array.from支持第二个参数 map 函数,比如去重同时转换:Array.from(new Set(arr), x => x * 2) - 性能几乎无差别: 两者底层都调用迭代器,实际项目中不必纠结,按团队习惯或可读性选择即可


















