一.es6数组去重(高性能)
1.利用Set结构和...扩展运算符
window.onload = function(){ var arr = [1,2,3,4,4,5,6,7,3,3,3] function unique(arr) { // Set结构的成员都是唯一的,Set函数可以接受一个数组作为参数,用来初始化(高性能) let set = [...new Set(arr)]
} unique(arr) }
2.利用Set结构和Array.from
window.onload = function(){ var arr = [1,2,3,4,4,5,6,7,3,3,3] function unique(arr) { // 利用Array.from将set结构转化成真正的数组 let set = Array.from(new Set(arr)) } unique(arr) }
3.利用 Array.filter()方法的过滤方法,将数组进行过滤,筛选条件是数组下标与检索下标一致。
window.onload = function(){ var arr = [1,2,3,4,4,5,6,7,3,3,3] function unique(arr) { let set = arr.filter((item,index) =>{ return arr.indexOf(item) === index } unique(arr) }
二.哈希表思想(最高性能)
window.onload = function(){ var arr = [1,2,3,4,4,5,6,7,3,3,3] function unique(arr) { // 新建一个结果数组、一个存储标志的对象hash,遍历数组,对象中arr[i]对应的值为ture的时候不重复添加; var result = [] , hash = {} ; // 定义新数组result 和hash. for ( let elem of arr ) { // 遍历前四个数时,hash表中没有这四个值,所以if语句成立,将数据push到result中,令这些表中的数都为true。 if ( ! hash [ elem ] ) { // 当遍历到第二个1的时候,之前已经令hash [ elem ] = true , 所以if语句就不执行了,就不会重复了 result.push ( elem ); hash [ elem ] = true; // 作为一个是否在数组中存在的标志 } } console.log(result) //[1, 2, 3, 4, 5, 6, 7] } unique(arr) }
三.用一个空数组去存首次出现(indexOf)的元素
window.onload = function(){ var arr = [1,2,3,4,4,5,6,7,3,3,3] function unique(arr) { let set = [] for(let x of arr) { if (set.indexOf(x) === -1) { set.push(x) } } console.log(set) //[1, 2, 3, 4, 5, 6, 7] } unique(arr) }
四.includes() 方法用来判断一个数组是否包含一个指定的值,根据情况,如果包含则返回 true,否则返回false。
window.onload = function(){ var arr = [1,2,3,4,4,5,6,7,3,3,3] function unique(arr) { let set = [] for(let x of arr) { if (!set.includes(x)) { set.push(x) } } console.log(set) //[1, 2, 3, 4, 5, 6, 7] } unique(arr) }
五.利用sort()方法
window.onload = function(){ var arr = [1,2,3,4,4,5,6,7,3,3,3] function unique(arr) { //先给数组排序,循环比较前后两个是否相等,如果相等就删除索引是i的这个,然后i-- arr = arr.sort(); for (let i = 0; i < arr.length; i++) { if (arr[i] === arr[i+1]) { arr.splice(i,1); i--; } } console.log(arr) //[1, 2, 3, 4, 5, 6, 7] } unique(arr) }
六.嵌套for循环,循环比较当前值和后面的值是否相等,如果相等就删除索引是j的这个,然后j--
window.onload = function(){ var arr = [1,2,3,4,4,5,6,7,3,3,3] function unique(arr) { for (let i = 0; i < arr.length; i++) { for (let j = i+1; j < arr.length; j++) { if (arr[i] === arr[j]) { arr.splice(j,1); j-- } } } console.log(arr) //[1, 2, 3, 4, 5, 6, 7] } unique(arr) }