1.最基本的去重方法es6
思路:定义一个新数组,并存放原数组的第一个元素,而后将元素组一一和新数组的元素对比,若不一样则存放在新数组中。json
function unique(arr){ var res = [arr[0]]; for(var i=1;i<arr.length;i++){ var repeat = false; for(var j=0;j<res.length;j++){ if(arr[i] == res[j]){ repeat = true; break; } } if(!repeat){ res.push(arr[i]); } } return res; }
2.先排序在去重
思路:先将原数组排序,在与相邻的进行比较,若是不一样则存入新数组数组
function unique(arr){ var arr2 = arr.sort(); var res = [arr2[0]]; for(var i=1;i<arr2.length;i++){ if(arr2[i] !== res[res.length-1]){ res.push(arr2[i]); } } return res; }
3.利用对象的属性去重(推荐)
思路:每次取出原数组的元素,而后再对象中访问这个属性,若是存在就说明重复数据结构
function unique(arr){ var res =[]; var json = {}; for(var i=0;i<arr.length;i++){ if(!json[arr[i]]){ res.push(arr[i]); json[arr[i]] = 1; } } return res; }
4.利用下标查询app
function unique(arr){ var newArr = [arr[0]]; for(var i=1;i<arr.length;i++){ if(newArr.indexOf(arr[i]) == -1){ newArr.push(arr[i]); } } return newArr; }
5.利用es6prototype
利用Array.from将Set结构转换成数组code
function dedupe(array){ return Array.from(new Set(array)); } dedupe([1,1,2,3]) //[1,2,3]
拓展运算符(...)内部使用for...of循环对象
let arr = [1,2,3,3]; let resultarr = [...new Set(arr)]; console.log(resultarr); //[1,2,3]
6.concat()方法排序
思路:concat() 方法将传入的数组或非数组值与原数组合并,组成一个新的数组并返回。该方法会产生一个新的数组。
function concatArr(arr1, arr2){ var arr = arr1.concat(arr2); arr = unique1(arr);//再引用上面的任意一个去重方法 return arr; }
7.Array.prototype.push.apply()it
思路:该方法优势是不会产生一个新的数组。
var a = [1, 2, 3]; var b = [4, 5, 6]; Array.prototype.push.apply(a, b);//a=[1,2,3,4,5,6] //等效于:a.push.apply(a, b); //也等效于[].push.apply(a, b); function concatArray(arr1,arr2){ Array.prototype.push.apply(arr1, arr2); arr1 = unique1(arr1); return arr1; }
8.arr.filter()
var arr = [0,0,1,'a',1,2,'b','a','a']; var res = arr.filter(function(ele,index,array){ return index === array.indexOf(ele); }); document.write(res);