陣列去重的幾種方法
陣列去重在日常開發中作中或者是面試中是經常出現的一個問題,結合es6可以有很多種方法實現
1 思路:將陣列第一項放到一個新陣列中,然後將原陣列的每一項與新陣列做對比,若無相同值,則將此資料放到新陣列中,最後返回新陣列
function unique1(arr){ let newArr=[arr[0]] for (let i=1;i<arr.length;i++) { let isRepeat=false; for (let j=0;j<newArr.length;j++) { if (newArr[j]==arr[i]) { isRepeat=true; break; } } if (!isRepeat) { newArr.push(arr[i]) } } return newArr }
2 思路:將原陣列排序,然後與新陣列的相鄰項比較
function unique2(arr){ let arrSort=arr.sort() let newArr=[arrSort[0]] for (let i=1;i<arrSort.length;i++) { if (newArr[newArr.length-1]!==arrSort[i]) { newArr.push(arrSort[i]) } } return newArr }
3 思路:利用陣列的indexof(),在新數組裡面遍歷目標陣列的每一項,若沒有則將此項新增到新陣列中
function unique3(arr){ let newArr=[] for (let i=0;i<arr.length;i++) { if (newArr.indexOf(arr[i])===-1) { newArr.push(arr[i]) } } return newArr }
4 思路:利用陣列方法includes(),判斷新陣列是否包含,若沒有則新增到新陣列中
function unique4(arr){ let newArr=[] for (let i=0;i<arr.length;i++) { if (!newArr.includes(arr[i])) { newArr.push(arr[i]) } } return newArr }
5 思路:利用陣列的filter()和includes()
function unique5(arr){ let newArr=[] return newArr=arr.filter((item)=>{ return newArr.includes(item)?'':newArr.push(item) }) }
6 思路:用陣列的forEach()和includes()
function unique6(arr){ let newArr=[] arr.forEach((item)=>{ newArr.includes(item)?'':newArr.push(item) }) return newArr }
7 思路:利用陣列的lastIndexOf()方法
function unique7(arr){ let newArr=[] for (let i=0;i<arr.length;i++) { if (newArr.lastIndexOf(arr[i])===-1) { newArr.push(arr[i]) } } return newArr }
8 思路:利用陣列的from和set方法
function unique8(arr){ return Array.from(new Set(arr)) }