javascript数组去重

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

 

posted @ 2016-10-30 19:07  scoop_zm  阅读(311)  评论(0编辑  收藏  举报