面試重點----手寫陣列方法----陣列去重
阿新 • • 發佈:2021-06-18
陣列去重一個主要的思路就是:遍歷原陣列中的每個元素,判斷新陣列中是否已有該元素,若有,則不操作;若沒有,則將該元素加入新陣列。這個思路寫成程式碼如下:
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]