前端面试高频题:删除数组重复元素的多种方法

最近在想着换工做,去了一家中关村的上市公司,面试官随便问了几个问题其中就提到了怎么删除数组元素的方法,表示这已是第三次遇到了这个问题了,因为知识口头说说因此就随便说了下,以前用的时候都是直接找的方法库虽然知道大体是怎么写的可是尚未真正写过,网上的方法仍是蛮多的这里也给你们分享一个做者写的吧,但愿对初学者有所帮助:javascript

//数组去重的方法
Array.prototype.unique=function(){
    //集中声明变量
    var 
      oldArr=this,
      newArr=[oldArr[0]],
      len=oldArr.length,
      i=1;
      
    //过滤空数组
    if(!len) return this;
    
    //过滤重复元素
    for(;i<len;i++){
       newArr.indexOf(oldArr[i])<0 ? newArr.push(_this) : '';  
    }
    //返回过滤后的数组没有影响原数组
    return newArr;
}
var arr=['a','a','b','a','c','d'];
console.log(arr.unique());//["a", "b", "c", "d", unique: function]

 

 

虽然网上也有不少并且本身写的也不咋地,可是毕竟本身写的逻辑清楚之后还能够顺着逻辑扩展好比扩展到对象元素去重或者是能够同时操做多个数组等等这里再放上别人的写的几个方法能够综合比较下html

方法1:
function oSort(arr)
        {
            var result ={};
            var newArr=[];
            for(var i=0;i
            {
                if(!result[arr[i]])

                {

                    newArr.push(arr[i])

                    result[arr[i]]=1

                }

            }

            return newArr

        }

原文出处:http://blog.sina.com.cn/s/blog_77a4568a0101d4lq.htmljava

方法2:
遍历要删除的数组arr, 把元素分别放入另外一个数组tmp中,在判断该元素在arr中不存在才容许放入tmp中
用到两个函数:for ...in 和 indexOf()
 
 
         var student = ['qiang','ming','tao','li','liang','you','qiang','tao'];
         function unique(arr){
              // 遍历arr,把元素分别放入tmp数组(不存在才放)
              var tmp = new Array();
              for(var i in arr){
                  //该元素在tmp内部不存在才容许追加
                  if(tmp.indexOf(arr[i])==-1){
                   }
          }
           return tmp;
      }
 
 
方法3:
把目标数组arr的元素值和键的位置调换 自动就把重复的元素给删除掉了,调换后的样子:array('qiang'=>1,'ming'=>1,'tao'=>1)
<script type="text/javascript">
   var student = ['qiang','ming','tao','li','liang','you','qiang','tao'];
   function unique(arr){
        var tmp = new Array();
        for(var m in arr){
            tmp[arr[m]]=1;
        }
        //再把键和值的位置再次调换
        var tmparr = new Array();
       for(var n in tmp){
         tmparr.push(n);
       }
     return tmparr;
  }
</script>

方法4面试

 

/**
  * 去除数组重复元素
  */
 function uniqueArray(data){  
   data = data || [];  
   var a = {};  
   for (var i=0; i<data.length; i++) {  
       var v = data[i];  
       if (typeof(a[v]) == 'undefined'){  
            a[v] = 1;  
       }  
   };  
   data.length=0;  
   for (var i in a){  
        data[data.length] = i;  
   }  
   return data;  
}  

 

 

 

方法都差很少第三个方法想法仍是蛮高明的~数组

相关文章
相关标签/搜索