茄子在线看片免费人成视频,午夜福利精品a在线观看,国产高清自产拍在线观看,久久综合久久狠狠综合

    <s id="ddbnn"></s>
  • <sub id="ddbnn"><ol id="ddbnn"></ol></sub>

  • <legend id="ddbnn"></legend><s id="ddbnn"></s>

    javascript數(shù)組去重小結(jié)
    來源:易賢網(wǎng) 閱讀:1025 次 日期:2016-07-22 16:23:59
    溫馨提示:易賢網(wǎng)小編為您整理了“javascript數(shù)組去重小結(jié)”,方便廣大網(wǎng)友查閱!

    本文給大家匯總介紹了javascript中數(shù)組去重的4種方法,分別是循環(huán)匹配去重,JSON去重/對象去重/字典去重,隊列遞歸去重,INDEXOF去重方式,非常的細(xì)致全面,有需要的小伙伴可以參考下。

    前言

    最近為了換工作,準(zhǔn)備下面試,開始回顧復(fù)習(xí)JavaScript相關(guān)的知識,昨天下午想到了數(shù)組去重的相關(guān)方法,干脆整理出幾篇JavaScript算法文章,以備后用,此系列文章不定篇數(shù),不定時間,想到哪寫到哪,不保證正確性,不保證高效率,只是談?wù)剛€人理解,如有錯誤,請諸位斧正。

    關(guān)于去重

    數(shù)組去重是一個比較常見的算法考察點(diǎn),實現(xiàn)去重的方式無外乎通過唯一性和非唯一性。簡單來講就是挑出唯一的或者刪除不唯一的。以下所有算法都是我自己瞎命名的,請無視之。

    循環(huán)匹配去重

    顧名思義,就是把數(shù)組中的每一個元素都和存放元素的數(shù)組對比,遇到不重復(fù)的元素,放入新數(shù)組中,直至循環(huán)結(jié)束,由于匹配也有循環(huán),也可以稱為雙循環(huán)匹配去重,這也是大家都能想到的最簡單的方式。

    實現(xiàn)代碼:

    var arr=[1,3,4,56,3,7,9,7];

    var result=[];

    //匹配

    function isMatch(array,n){

      for(var i=0;i<array.length;i++){

        if(array[i]==n){

          return true;

        }

      }

      return false;

    };

    //驗證所有元素

    function unqiue(array){

      for(var i=0;i<array.length;i++){

        if(!isMatch(result,array[i])){

          result.push(array[i]);

        }

      }

      return result;

    };

    console.log(unqiue(arr));

    注意:上面方法有一個bug,當(dāng)存在數(shù)字和數(shù)字形式的字符串的時候,沒有區(qū)分出數(shù)字和數(shù)字字符串。因為在匹配函數(shù)isMatch()里用的是雙等“==”,沒有驗證元素類型,實際應(yīng)該使用全等“===”。

    修改后的代碼如下:

    var arr=[1,3,4,56,3,'1',7,9,7];

    var result=[];

    //匹配

    function isMatch(array,n){

      for(var i=0;i<array.length;i++){

        if(array[i]===n){

          return true;

        }

      }

      return false;

    };

    //驗證所有元素

    function unqiue(array){

      for(var i=0;i<array.length;i++){

        if(!isMatch(result,array[i])){

          result.push(array[i]);

        }

      }

      return result;

    };

    console.log(unqiue(arr));

    算法優(yōu)缺點(diǎn):

    優(yōu)點(diǎn):

    實現(xiàn)簡單,思路直觀

    缺點(diǎn):

    效率低下

    JSON去重/對象去重/字典去重

    JSON去重,簡單來講就是利用Object對象key的唯一性,將數(shù)組的元素轉(zhuǎn)換為JSON或者說對象的key值。JSON的value存儲數(shù)組的索引index,然后對JSON對象進(jìn)行for in循環(huán),存儲到新數(shù)組中。

    Array、JSON、{}都是Object,所以采用任意一種都可以實現(xiàn)此算法。

    實現(xiàn)代碼:

    Array方式:

    var arr=[1,3,4,56,3,'1',7,9,7];

    function unqiue(array){

      var cache=[];

      var result=[];

       //將數(shù)組元素轉(zhuǎn)為對象的key

      for(var i=0;i<array.length;i++){

        cache[array[i]]=i;

      };

      //存儲key(實際的數(shù)組元素)

      for(key in cache){

        result.push(key);

      };

      return result;

    }

    console.log(unqiue(arr));

    JSON方式:

    var arr=[1,3,4,56,3,'1',7,9,7];

    function unqiue(array){

      var cache={};

      var result=[];

       //將數(shù)組元素轉(zhuǎn)為對象的key

      for(var i=0;i<array.length;i++){

        cache[array[i]]=i;

      };

      //存儲key(實際的數(shù)組元素)

      for(key in cache){

        result.push(key);

      };

      return result;

    }

    console.log(unqiue(arr));

    Object方式:

    var arr=[1,3,4,56,3,'1',7,9,7];

    function unqiue(array){

      var cache=new Object();

      var result=[];

       //將數(shù)組元素轉(zhuǎn)為對象的key

      for(var i=0;i<array.length;i++){

        cache[array[i]]=i;

      };

      //存儲key(實際的數(shù)組元素)

      for(key in cache){

        result.push(key);

      };

      return result;

    }

    console.log(unqiue(arr));

    算法優(yōu)缺點(diǎn):

    優(yōu)點(diǎn):

    簡單

    效率非常高

    缺點(diǎn):

    1.改變了數(shù)組元素的類型() 

    2.有bug(無非區(qū)分?jǐn)?shù)字和數(shù)字類型字符串)

    隊列遞歸去重

    昨天晚上思忖良久想到用隊列的方式,先將數(shù)組排序成升序或降序的隊列,這樣相同的元素就處在一個區(qū)域內(nèi),然后從隊尾向前匹配,如果匹配成功,刪除隊尾,然后前一個元素再向其前面的匹配。整個匹配完成之后,剩下的元素就是去重過后的隊列。

    var arr=[6, 4, 6, 9, '6', 13, 56, 9, ,'11',1, 8, '7', 17, 5, 45, 3, 7];

    function unqiue(array){

      //排序數(shù)組,形成隊列

      array.sort(function(m,n){return m-n;});

      ////排序后,隊尾向前對比,如果相同,刪除隊尾,依次類推

      function loop(Index){

        if(Index>=1){

          if(array[Index]===array[Index-1]){

            arr.splice(Index,1);

          }

          loop(Index-1);

        }

         

      }

      loop(array.length-1);

      return array;

    }

    console.log(unqiue(arr));

    算法優(yōu)缺點(diǎn):

    優(yōu)點(diǎn):

    效率較高

    缺點(diǎn):

    效率不是最高

    INDEXOF去重方式

    判斷瀏覽器是否支持indexOf ,indexOf 為ecmaScript5新方法 IE8以下(包括IE8, IE8只支持部分ecma5)不支持

    if (!Array.prototype.indexOf){ 

    // 新增indexOf方法 

    Array.prototype.indexOf = function(item){ 

    var result = -1, a_item = null; 

    if (this.length == 0){ 

    return result; 

    for(var i = 0, len = this.length; i < len; i++){ 

    a_item = this[i]; 

    if (a_item === item){ 

    result = i; 

    break; 

    return result; 

    更多信息請查看網(wǎng)絡(luò)編程
    易賢網(wǎng)手機(jī)網(wǎng)站地址:javascript數(shù)組去重小結(jié)
    由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

    2026上岸·考公考編培訓(xùn)報班

    • 報班類型
    • 姓名
    • 手機(jī)號
    • 驗證碼
    關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機(jī)站點(diǎn) | 投訴建議
    工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
    云南網(wǎng)警備案專用圖標(biāo)
    聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
    咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
    云南網(wǎng)警報警專用圖標(biāo)