1.遍历数组法: 这应该是最简单的去重方法(实现思路:新建一新数组,遍历数组,值不在新数组就加入该新数组中)
// 遍历数组去重法 function unique(arr){ var _arr = [] //遍历当前数组 for(var i = 0; i < arr.length; i++){ //如果当前数组的第i已经保存进了临时数组,那么跳过, //否则把当前项push到临时数组里面 if (_arr.indexOf(arr[i]) == -1) _arr.push(arr[i]) } return _arr }
注意点:indexOf 为 ES5 的方法,注意浏览器兼容,需要自己实现 indexOf
2.对象键值对(hash) 法:速度快,高效,占用更大的内存换取更快的时间,用 JavaScript 中的 Object 对象来当做哈希表,hash去重的核心是构建了一个 hash 对象来替代 indexOf
// hash 去重法 function unique(arr){ var _arr = [], hash = {} for (var i = 0; i < arr.length; i++) { var item = arr[i] var key = typeof(item) + item // 对象的键值只能是字符串, typeof(item) + item来去分1和'1'的情况 if(hash[key] !== 1){ _arr.push(item) hash[key] = 1 } } return _arr }
3.炫酷的 es6 Set数据结构: ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值
function unique(arr){ return Array.from(new Set(arr)) // Array.from方法用于将两类对象转为真正的数组: // 类似数组的对象(array-like object)和可遍历(iterable)的对象 }
关于 JavaScript 数组去重,还有很多很多,这里介绍了几种常规的,更多的自己去探索!