20181005 js數組去重的三種方法
阿新 • • 發佈:2018-10-05
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數組去重的三種方法