javascript之九種陣列去重的方法
阿新 • • 發佈:2018-12-10
陣列去重,第一反應就是for迴圈,如果一個for迴圈解決不了,那就多來幾個。。。哈哈,心血來潮查了下陣列去重的方法,是我見識短淺。以下,我將介紹九種js中陣列去重的方法:
- 利用 ES6 Set去重
- 利用splice()去重
- 利用indexOf()去重
- 利用sort()去重
- 利用 物件的屬性不能相同的特性進行陣列去重
- 利用includes()
- 利用hasOwnProperty()去重
- 利用遞迴去重
- 利用Map資料結構去重
利用ES6 Set()去重:
/*ES6 Set()方法陣列去重*/ function unique(arr) { //from()是將Set()資料結構轉換為陣列型別 //Set()資料結構類似於陣列,但不同的是Set()成員值唯一 return Array.from(new Set(arr)); } var arr =[1,1,2,3,4,4]; console.log(unique(arr));
控制檯輸出結果如下:
利用splice()去重:
function unique1(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); //splice(j,1, )替換的值是空 j--; } } } return arr; } console.log(unique1(arr));
輸出結果和上例結果一致,在這裡需要注意的是splice(),它的本質是splice(index,len,[item]),index是陣列開始下標,len替換刪除元素的長度,[item]替換的值。
利用indexOf()去重:
function unique2(arr) { /* 思路:1,建立新的空陣列; * 2,for迴圈遍歷去重的陣列; * 3,indexOf()查詢遍歷出的陣列在新的陣列是否出現,如果出現則繼續遍歷,如果未出現,則利用push方法新增到數組裡*/ var arr1 = []; for(var i = 0; i < arr.length; i++){ if(arr1.indexOf(arr[i]) == -1){ arr1.push(arr[i]); } } return arr1; } var array = [4,5,6,77,8,8,,77,5]; console.log(unique2(array));
注:indexOf()返回值,如果匹配到返回1,未匹配到返回-1。
控制檯輸出:
利用sort()去重:
/*利用sort()去重*/ function unique3(arr){ arr = arr.sort(); var array = [arr[0]]; for(var i = 1; i < arr.length; i++){ //因為不是從第一個元素開始的,所以i的初始值不能為0. if(arr[i] !== arr[i-1]){ array.push(arr[i]); } } return array; } var arr3 = [11,33,66,8,8,5,33,11]; console.log(unique3(arr3));
控制檯輸出結果:
利用 物件的屬性不能相同的特性進行陣列去重:
/*利用 物件的屬性不能相同的特性進行陣列去重*/ function unique4(arr){ 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; } var arr4 = ['a','a','b','c','n','d','d','s','n']; console.log(unique4(arr4));
控制檯輸出結果:
利用includes()去重:
/*利用includes()去重*/ function unique5(arr) { var array = []; for(var i = 0; i < arr.length; i++){ if(!array.includes(arr[i])){ array.push(arr[i]); } } return array; } var arr5 = [100,50,45,90,100,4,50]; console.log(unique5(arr5));
控制檯輸出結果:
利用hasOwnProperty()去重:
/*利用hasOwnProperty()去重*/ function unique6(arr) { /*hasOwnProperty去重:判斷物件是否有某個特定的屬性,必須用字串指定該屬性。*/ var obj = {}; /*filter()對陣列中每個元素都執行一次指定的函式(callback()),並建立一個新的陣列*/ return arr.filter(function (item,index,arr) {return obj.hasOwnProperty(typeof item + item)?false:(obj[typeof item + item] = true) }) //callback(當前元素,當前元素索引,當前元素陣列對像) } var arr6 = [200,200,300,100,100,290,300]; console.log(unique6(arr6));
控制檯輸出結果:
利用遞迴去重:
/*利用遞迴去重*/ function unique7(arr) { var arry = arr; var len = arry.length; arry.sort(function (a,b) {return a - b;}) function loop(index){ if(index >= 1){ if(arry[index]===arry[index - 1]){ arry.splice(index,1); } loop(index - 1); } } loop(len - 1); return arry; } var arr7 =[1,2,4,5,6,6,5,4,2]; console.log(unique7(arr7)); 控制檯輸出結果:
利用Map資料結構去重:
/*利用map資料結構去重*/ function unique8(arr) { var map = new Map(); var array = new Array(); for(var 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; } var arr8 = [1,1,1,2,2,2,3,3,3]; console.log(unique8(arr8)); 控制檯輸出結果: