<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <h3>数组去重的方法</h3> </body> <script> var arr = [ 1,1,'1','1',true,true,'true','true',false, 'false',undefined,undefined,'undefined','undefined', null,null,NaN,NaN,'NaN',0,0,'0',{},{}, ]; // 第1//ES6 Set去重(ES6中最常用) //Array.from()方法就是将一个类数组对象或者可遍历对象转换成一个真正的数组。 //所谓类数组对象,最基本的要求就是具有length属性的对象。 //set(es6提供新数据结构,类似数组,但成员值都是唯一的)。 //方法:添加成员返回set本身add(value),删除成员返回布尔值表示是否删除成功delete(value),返回布尔值判断是否为set成员has(value),清除所有成员无返回值clear() //注:set内部两个NaN相等,两个对象总是不相等的,去重不了{}对象 // function unique1(arr) { // return Array.from(new Set(arr)) // } // console.log(unique1(arr)); // 第2for嵌套for // NaN和{}没有去重,null直接都消失了 // function unique2(arr){ // for(var i=0;i<arr.length;i++){ // for(var j=i+1;j<arr.length;j++){ // if(arr[i]==arr[j]){ // arr.splice(j,1); // j--; // } // } // } // return arr; // } // console.log(unique2(arr)); // 第3indexOf //indexOf,如果检测结果没有匹配值返回-1,匹配到返回1 //NaN 和{}没有去重 // function unique3(arr) { // if(!Array.isArray(arr)){ // console.log('type error'); // return // } // var array = []; // for(var i=0;i<arr.length;i++){ // if(array.indexOf(arr[i]) === -1){ // array.push(arr[i]); // } // } // return array; // } // console.log(unique3(arr)); // 第4sort()排序方法 //对排序结果遍历相邻元素对比 //NaN 和{}没有去重 // function unique4(arr) { // if(!Array.isArray(arr)){ // console.log('type error'); // return // } // arr = arr.sort(); // var array = [arr[0]]; // for(var i=1;i<arr.length;i++){ // if(arr[i]!==arr[i-1]){ // array.push(arr[i]) // } // } // return array; // } // console.log(unique4(arr)); // 第5利用对象的属性不能相同的特点进行去重 //两个true都去掉了,但其他都成功了 // function unique5(arr) { // if(!Array.isArray(arr)){ // console.log('type error'); // return // } // var array = []; // var obj = {}; // for(var i=0;i<arr.length;i++){ // if(!obj[arr[i]]){ // array.push(arr[i]); // obj[arr[i]] = 1; // }else{ // obj[arr[i]]++; // } // } // return array; // } // console.log(unique5(arr)); // 第6,includes检测数组是否有某个值返回布尔值(es6) //{}没有去重 // function unique6(arr) { // if(!Array.isArray(arr)){ // console.log('type error'); // return // } // var array = []; // for(var i=0;i<arr.length;i++){ // if(!array.includes(arr[i])){ // arr.push(arr[i]); // } // } // return array; // } // console.log(unique6(arr)); // 第7hasOwnProperty //hasOwnProperty判断对象是否存在属性 //所有的都去重了 function unique7(arr) { var obj = {}; return arr.filter(function(item,index,arr){ return obj.hasOwnProperty(typeof item + item)?false:(obj[typeof item + item] = true) }) } console.log(unique7(arr)); // 第8利用filter //对象未去重,NaN都被去掉了 // function unique8(arr){ // return arr.filter(function(item,index,arr){ // return arr.indexOf(item,0) === index; // }) // } // console.log(unique8(arr)); // 第9,递归去重 //NaN和{}未去重 // function unique9(arr) { // var array = arr; // var len = array.length; // array.sort(function(a,b){ // return a+b; // }) // function loop(index){ // if(index >=1){ // if(array[index] === array[index-1]){ // array.splice(index,1); // } // loop(index-1); // } // } // loop(len-1); // return array; // } // console.log(unique9(arr)); // 第10,Map数据结构去重 //{}未去重 // function unique10(arr) { // let map = new Map(); // let array =new Array(); // for(let i=0;i<arr.length;i++){ // if(map.has(arr[i])){ // map.set(arr[i],true); // }else{ // map.set(arr[i],false); // array.push(arr[i]); // } // } // return array; // } // console.log(unique10(arr)); </script> </html>