1. 程式人生 > 其它 >面試重點----手寫陣列方法----陣列去重

面試重點----手寫陣列方法----陣列去重

陣列去重一個主要的思路就是:遍歷原陣列中的每個元素,判斷新陣列中是否已有該元素,若有,則不操作;若沒有,則將該元素加入新陣列。這個思路寫成程式碼如下:

let arr = [1,2,3,5,4,6,2,3,1,1]
let arr2 = []
for(let i of arr){
   if(arr2.indexOf(i) == -1){
      arr2.push(i)
   }
}          

其中最關鍵的一步,就是“判斷新陣列中是否已有該元素”,上面使用了陣列的indexOf方法,這一判斷條件還可以替換成:

!arr2.includes(i) 

如果不使用已有的陣列方法,那實現這個判斷條件需要兩層遍歷,外迴圈遍歷原陣列,內迴圈遍歷新陣列,看上去相當笨拙:

let arr6 = []
arr6[0] = arr[0]
for (let i of arr) {
   for(let k of arr6){
      if (k == i) {
        break
      }
      if(k == arr6[arr6.length-1]){
        arr6.push(i)
      }
   }  
}

還可以利用陣列的filter方法,我們注意到:對於多次出現的元素,其indexOf方法返回的只是它第一次出現的索引,因此可以把“元素的索引和其indexOf方法返回值”作為過濾條件,這相當於多個相同元素,只保留第一個。

let arr4 = arr.filter( (item, index, self) => {
   return self.indexOf(item) == index
})
console.log(arr4)

我們知道集合最大的特點就是其中沒有重複的元素,而陣列與集合之間的轉化其實很簡單(這應該是最簡單的方法):

let s = new Set(arr)
let arr3 = [...s]