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]) } } }