1、双重for循环
时间复杂度(O^2),所有方式中时间开销最大。
仅仅去除数组中的基本类型元素(不包含 NaN,NaN!==NaN)。
1 | function distinct(arr){ |
测试样例
1 | var arr1=[1,2,2,3,"a","d","s","a ","s","1",null,null,undefined,undefined,NaN,NaN,new String("name"),new String("name")]; |
总结:NaN和Object不能去重
2、Array.filter()和indexOf()
Array.filter()
:为每个元素执行一次callback,将返回所有结果为true的数组元素创建的新的数组。
Array.indexOf():返回数组中第一次出现该元素的索引
思路:比较元素在数组中第一次出现的位置(索引)和自身的位置(索引)是否相等,不等则重复。
1 | function distinct(arr){ |
测试样例:
1 | var arr1=[1,2,2,3,"a","d","s","a","s","1",null,null,undefined,undefined,NaN,NaN,new String("name"),new String("name")]; |
总结:NaN丢失,Object不去重
3、ES6 Set去重
Array.from():方法从一个类似数组或可迭代对象创建一个新的,浅拷贝的数组实例
1 | function distinct(arr){ |
测试样例:
1 | var arr1=[1,2,2,3,"a","d","s","a","s","1",null,null,undefined,undefined,NaN,NaN,new String("name"),new String("name")]; |
总结:Object不能去重
4、Object键值对
1 | function distinct(arr){ |
测试样例:
1 | var arr1=[1,2,2,3,"a","d","s","a","s","1",null,null,undefined,undefined,NaN,NaN,new String("name"),new String("name")]; |
总结:全部去重
- 本文作者: Tsailor
- 本文链接: http://tsailor.github.io/2020/07/20/JS数组去重的多种方式比较/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!