JavaScript中如何从数组获取唯一值 数组去重实现方案求助
JavaScript数组提取唯一值最优实现方案
针对给出的测试数组,最简洁且性能最优的现代实现方案基于ES6原生Set数据结构,Set本身设计为存储唯一值的集合,不需要手写遍历判断逻辑,补全后的代码如下:
var myArray = ['a', 1, 'a', 2, '1']; // 写法1:展开运算符 var unique = [...new Set(myArray)]; // 写法2:Array.from 转换,和写法1效果完全一致 var unique = Array.from(new Set(myArray)); // 运行后unique的值为 ['a', 1, 2, '1']
方案特性
- 语义清晰代码量小,属于目前JS生态里数组去重的公认标准写法
- 性能优异,底层基于哈希表实现,处理大长度数组时的耗时远低于传统循环对比方案
- 严格遵循
===严格相等判断规则,会将数字1和字符串'1'识别为不同值,符合常规业务去重预期
如果需要兼容不支持ES6的老旧运行环境(如IE11及更早版本),可以使用filter配合indexOf的兼容写法:
var myArray = ['a', 1, 'a', 2, '1']; var unique = myArray.filter(function(item, index, arr) { // 仅保留元素第一次出现位置匹配当前索引的项,过滤后续重复值 return arr.indexOf(item) === index; });
注意:如果业务场景需要忽略类型差异做去重(比如将数字1和字符串'1'判定为重复值),不要直接使用宽松相等
==做判断,建议先统一所有元素的类型后再执行去重逻辑,避免隐式类型转换引入非预期bug。
内容的提问来源于stack exchange,提问作者Nancie L Beckett
相关产品推荐
相关产品推荐

