JS的數組去重也是前端面試經常問到的問題,之前有一次面試就遇到讓我寫數組去重,而且一般這個問題都伴隨著多寫一種多加分的情況,所以掌握的方法自然多多益善。 網上可以找到很多數組去重的方法,我自己整理了一下以供今後自己複習。 利用indexOf: 最簡單的方法就是利用indexOf方法來實現數組去重,但 ...
JS的數組去重也是前端面試經常問到的問題,之前有一次面試就遇到讓我寫數組去重,而且一般這個問題都伴隨著多寫一種多加分的情況,所以掌握的方法自然多多益善。
網上可以找到很多數組去重的方法,我自己整理了一下以供今後自己複習。
利用indexOf:
最簡單的方法就是利用indexOf方法來實現數組去重,但這個方法有一個缺點就是老版本瀏覽器不支持
function unique(arr){ var newArr = [] for(var i=0,len=arr.length;i++){ var item = arr[i] if(newArr.indexOf(item) == -1){ newArr.push(item) } } return newArr }
利用hash表:
function unique(arr){ var hash = {} var result = [] for(var i=0,len=arr.length;i<len;i++){ if(!hash[arr[i]]){ result.push(arr[i]) hash[arr[i]] = true } } return result }
數組去重升級版:
這是我在面試時遇到的題,要求是這樣的,不僅要對數組去重,而且還要輸出重覆數據重覆的次數。做法其實就是hash表去重法的改進而已。
function unique(arr){ var hash = {} var result = [] for(var i=0,len=arr.length;i<len;i++){ if(!hash[arr[i]]){ hash[arr[i]] = 1 result.push(arr[i]) }else{ hash[arr[i]] += 1 } } console.log("去重後的數組為:"+result) console.log("數據重覆的情況為:") for(var key in hash){ if(hash[key]>1){ console.log(key+":"+hash[key]) } } }