1. 程式人生 > >20181005 js數組去重的三種方法

20181005 js數組去重的三種方法

num 訪問 三種 uniq st2 不同 har 表示法 位置

<!DOCTYPE html>

<html> <head> <meta charset="UTF-8"> <title>數組去重</title> </head> <body> <script type="text/javascript"> //註意有一個元素是空的 var test1 = [0,0,1,1,2,‘sss‘,2,,3,‘abc‘,3,4,4,‘sss‘,‘apple‘,5,5,6,7,8,9,function a(){}];
//第一種方法是遍歷新數組newArr裏有沒有包含arr裏的i項,如果沒有則向newArr裏添加arr[i]項,如果有則跳過 //需考慮indexOf()的兼容性問題 function arrayUnique1(arr){ var newArr = []; for(var i =0; i < arr.length; i++){ if(newArr.indexOf(arr[i]) == -1){
newArr.push(arr[i]); } } return newArr; } console.log(arrayUnique1(test1)); //[0, 1, 2, "sss", undefined, 3, "abc", 4, "apple", 5, 6, 7, 8, 9, function] //第二種方法 var test2 = [0,0,1,1,2,‘sss‘,2,,3,‘abc‘,3,4,4,‘sss‘,‘apple‘,5,5,6,7,8,9,function a(){}];
//先將數組進行排序,重復元素會在相鄰位置 //拿原數組第i個和新數組的最後一個進行比較,如果不同,則將該元素存入新數組中 //該方法由於使用sort()方法,所以會改變數組順序 function arrayUnique2(arr){ arr.sort(); var newArr = [arr[0]]; for(var i = 1; i < arr.length; i++){ if(arr[i] !== newArr[newArr.length-1] ){ newArr.push(arr[i]); } } return newArr; } console.log(arrayUnique2(test2));//[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, "abc", "apple", function, "sss", undefined] // 第三種方法 var test3 = [0,0,1,1,2,‘sss‘,2,,3,‘abc‘,3,4,4,‘sss‘,‘apple‘,5,5,6,7,8,9,function a(){}]; //不太熟悉hash表,大概意思如下: //遍歷原數組,每次從原數組取出一個元素,然後到新對象中去訪問這個屬性,如果不能訪問到值,則把它存放到新數組中,同時把這個元素作為一個屬性,並賦值為true,存入到新建立的對象中。如果能訪問到值,則說明重復; //訪問對象的屬性有兩種方式 obj[‘attr‘] 或者 obj.attr; //當知道具體屬性名時可以用obj.attr,如arr.length;當不確定屬性名時,就要用obj[‘attr‘]; //這兩種方法區別上不大,都有對應的使用場景。點表示法一般作為靜態對象使用時來存取屬性。而數組表示法在動態存取屬性時就非常有用。 function arrayUnique3(arr){ var newArr = [], hash = {}; for(var i = 0; i < arr.length; i++){ if(!hash[arr[i]]){ hash[arr[i]] = true; newArr.push(arr[i]); } } return newArr; } console.log(arrayUnique3(test3));//[0, 1, 2, "sss", undefined, 3, "abc", 4, "apple", 5, 6, 7, 8, 9, function] </script> </body> </html>

20181005 js數組去重的三種方法