标签: 数组 JavaScript
前言
博客第一篇技术文章(非常基础,因为我太菜了)总结了几种不同方法的数组去重方法。文章不是很全面,还有例如利用对象唯一性去重等方法,可是我觉得太麻烦和有些缺点就没有收集了。
双循环
1 | function unique(arr) { |
说明:这就是基本的双循环去重。注释已经较好的说明原理,注意的就是j=++i;相当于j = j+1; i = i+1;。
sort()
1 | function unique(arr) { |
说明:由于排序的缘故,元素只需跟后一个元素比较就可以了,该方法效率偏低,但思路很清晰。
indexOf()
1 | function unique(arr) { |
说明:indexOf()是es5的语法,对它不熟悉的话可以点击下面的链接浏览一下。去重的原理是indexOf()会对没找到的元素,返回-1,此时添加此元素即可去重。
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf
includes()
1 | function unique(arr) { |
说明:原理跟上面的indexOf()一样,值得注意的是forEach()是es5语法,ie6-8是不能用的,mdn上有兼容的方法。forEach()的作用是遍历数组元素,对它们执行相同的方法。includes()方法用来判断一个数组是否包含一个指定的值,根据情况,如果包含则返回true,否则返回false。下面链接介绍它们的用法。
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/includes
Map(es6)
对于es6不熟悉的人(我)可以看看阮一峰大神的著作,里面就有详细的Map和Set的说明
http://es6.ruanyifeng.com/#docs/set-map
1 | function unique(arr) { |
说明:关于这部分我还不是很熟悉,待我研究后再来补充吧。
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Map
Set(es6)
1 | function unique(arr) { |
1 | // 拓展运算符(…)内部使用for...of循环,for...of支持数组,和类数组对象 |
说明:你没看错,去重就这么简单,具体的原理我再来补充吧!