zoukankan      html  css  js  c++  java
  • 前端面试高频题:删除数组重复元素的多种方法

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

    //数组去重的方法
    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]

     

    虽然网上也有很多而且自己写的也不咋地,但是毕竟自己写的逻辑清楚以后还可以顺着逻辑扩展比如扩展到对象元素去重或者是可以同时操作多个数组等等这里再放上别人的写的几个方法可以综合比较下

    方法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.html

    方法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;  
    }  

    方法都差不多第三个方法想法还是蛮高明的~

  • 相关阅读:
    List for game to play latter
    C语言基础问题总结
    Java基础学习总结(70)——开发Java项目常用的工具汇总
    谈谈普通码农如何不靠工资也能月入过万
    Java基础学习总结(69)——匿名内部类与Lambda表达式
    Html学习总结(2)——Html页面head标签元素的意义和应用场景
    Android学习总结(5)——9个非常有用的Andorid 程序片段
    Mysql学习总结(39)——30条MySql语句优化技巧
    Java基础学习总结(68)——有关Java线程方面的面试题
    Mysql学习总结(38)——21条MySql性能优化经验
  • 原文地址:https://www.cnblogs.com/yy-hh/p/4591852.html
Copyright © 2011-2022 走看看