中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

javascript實現數組去重的多種方法
來源:易賢網 閱讀:994 次 日期:2016-07-20 15:32:24
溫馨提示:易賢網小編為您整理了“javascript實現數組去重的多種方法”,方便廣大網友查閱!

這篇文章主要為大家詳細介紹了javascript實現數組去重的多種方法,感興趣的小伙伴們可以參考一下

先說說這個實例的要求:寫一個方法實現數組的去重。(要求:執行方法,傳遞一個數組,返回去重后的新數組,原數組不變,實現過程中只能用一層循環,雙層嵌套循環也可寫,只做參考);

先給初學者解釋一下什么叫數組去重(老鳥跳過):意思就是講數組里面重復的元素去掉,比如說var arr = [3,2,4,2,1,2]; 數組去重得到的新數組是 [3,2,4,1],就是這么一個功能。

實現方法比較簡單,實現的方式也比較多,很多大牛也寫過相關的文章,之所以寫這邊博客,旨在一是備忘,二是給初學者能更好的理解其實現的原理,好,我們看第一種實現方式:

第一種,通過遍歷新數組來去重

var arr = [1,'b','b',4,3,3,4,5,1];

    //第一種

    Array.prototype.unique1 = function(){

      var arr1 = []; //定義一個新數組

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

        if(arr1.indexOf(this[i]) == -1){//判斷目標數組中在原數組里是否存在

          arr1.push(this[i]);

        } 

      } 

      return arr1;

    }

    console.log(arr); //[1,'b','b',4,3,3,4,5,1]

    console.log(arr.unique1()); //[1, "b", 4, 3, 5]

    //這種方法的主要思路就是,新建一個數組,然后在原數組中,從第一個開始,看看新數組里面有沒有這個元素,如果有,就忽略,然后進行下一個,如果沒有,則把這個元素存到新數組里面,

    //也就是說,每一次比較,都會遍歷新數組,直到找到相同元素為止,比較耗性能

如果大家不習慣這個寫法,可以改成下面的寫法,效果是一樣的:

var arr = [1,'b','b',4,3,3,4,5,1];

function unique1(arr){

      var arr1 = [];

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

        if(arr1.indexOf(arr[i]) == -1){//判斷目標數組中在原數組里是否存在

          arr1.push(arr[i]); 

        } 

      } 

      return arr1;

    }

    console.log(arr); //[1,'b','b',4,3,3,4,5,1]

    console.log(unique1(arr)); //[1, "b", 4, 3, 5]

下面的方法我就不改寫法了,你們可以按照上面的格式來改寫一下,結果我也不輸出了,因為結果是一樣的,注釋寫在代碼中,慢慢體會一下

第二種,通過hash表(這個概念有點大,具體原理就不在這里細說了,有時間我會單獨寫一遍,這是好東西)實現

var arr = [1,'b','b',4,3,3,4,5,1];

Array.prototype.unique2 = function(){

      var hash = {}; //定義一個hash表

      var arr1 = []; //定義一個新數組

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

        /*

          這里比較難理解,我們一步一步來看:

          hash是一個對象,則存在鍵值對(key:value),只不過現在是為空的,所以hash[key] = value;

          第一步:i=0;this[i]=this[0]=1; hash[this[0]] = hash[1] , 因為hash初始為空,沒有找到key=1的值,所以然后undefined,

          執行下一步:hash[1] = true(此時hash對象就有了第一組鍵值對),將原數組的第一個數添加到新數組中,重復第一步

          因為不重復的判斷hash的值都是undefined,而重復的都為true了,所以不重復都被添加到新數組中

          因為hash表存的值是存的地址,放在堆內存中,所以有多少個不重復的元素,就要分多少個內存來存放,所以這種方法比較占內存,但是相比之下,這種的運算運動是最快的,

          這也就是用空間來換取時間了,數據量比較小,推薦用此方法

        */

        if(! hash[this[i]]){

          hash[this[i]] = true;

          arr1.push(this[i]);

        }

      }

      return arr1;  

    }

    console.log(arr);

    console.log(arr.unique2());

第三種,通過遍歷自身的位置是否一致來實現

var arr = [1,'b','b',4,3,3,4,5,1];

Array.prototype.unique3 = function(){

      var arr1 = []; //定義一個新數組

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

        if(this.indexOf(this[i])==i){

        //這里也是indexOf遍歷,看從第一個元素在原數組中的位置,如果第一次出現的位置和下標相等,說明當前元素的不重復的,如果不等,說明該元素前面已經出現過

          arr1.push(this[i]);

        }

      }

      return arr1;  

    }

    console.log(arr);

    console.log(arr.unique3());

第四種,這個有點意思,只能運用到特殊場合,就是先跟數組排序,然后22比較,輸出一個排序過的新數組

Array.prototype.unique4 = function(){

      /*

        這里是思路是,先排序(默認從小到大),然后將原數組的第一個給新數組,

        因為是經過排序的,所以重復的只會存在在相鄰位置

        這里就相當于是做22比較,如果相等,則進行下一組,如果不相等,則把這個數存到新數組中,用這個數再進行比較

      */

      this.sort();

      var arr1 = [this[0]];

      for(var i=1;i<this.length;i++){

        if(this[i] !== arr1[arr1.length-1]){

          arr1.push(this[i]);

        } 

      }

      return arr1;  

    }

    console.log(arr);

    console.log(arr.unique4());

完結!

要求里面還說,可以使用雙層嵌套循環來實現,無法就是用2層for循環,讓每一個與原數組去比較

Array.prototype.unique5 = function(){

      //雙層循環,一一比較

      for(var i=0;i<this.length;i++){ //從0開始

        for(j= i+1;j<this.length;j++){ //從1開始,逐個比較

          if(this[i] === this[j]){ //如果恒定

            this.splice(j,1);  //就將這個元素刪掉

          } 

        } 

      }

      return this;  

    }

    console.log(arr);

    console.log(arr.unique5());

這種寫法的循環次數太多,不推薦,有人會說,第一種和第三種不也是每次都遍歷一遍嗎?跟第5種感覺也差不多呢?是的,你能這么理解,說明你理解了,但是呢,又不是特別的理解,我們說差不多那可就差太多了,indexOf()表示的是找到第一個匹配的元素就會停止遍歷,而第5種則是不管找不找得到,都會把整個數組遍歷一遍,如果數據量大,那你覺得哪個性能要好一點?

特別注意的一點:如果在比較兩兩之間的值是全等或不等的時候,一定要用恒定(===)和不恒定(!==),因為這會涉及到元素的類型上,如 1與'1'是不恒等的!

上面的可真是干貨了,一點水分都沒有,只能靠大家自己領悟了!

更多信息請查看網絡編程
易賢網手機網站地址:javascript實現數組去重的多種方法
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
在线视频一区二区| 亚洲欧美日韩国产综合| 亚洲一区二区三区精品在线| 国产精品女人久久久久久| 亚洲欧美制服中文字幕| 久久夜色精品国产噜噜av| 日韩天堂在线观看| 国产一区二区毛片| 欧美日韩免费| 久久精品在线观看| 亚洲一区二区毛片| 亚洲国产精品第一区二区| 国产精品网曝门| 麻豆91精品91久久久的内涵| 日韩亚洲成人av在线| 精品成人a区在线观看| 欧美午夜宅男影院在线观看| 久久资源在线| 欧美一区二区大片| 亚洲影院污污.| 久久蜜桃精品| 亚洲欧美中文日韩v在线观看| 国产日韩欧美一区二区三区四区| 欧美日韩免费观看一区| 女同一区二区| 久久久久久久久久久久久女国产乱| 亚洲私人影院| 亚洲韩国青草视频| 黄色成人在线网站| 欧美日韩少妇| 欧美日韩另类字幕中文| 欧美精品国产一区| 久久精品一本| 久久久久久久久久久久久女国产乱| 午夜欧美电影在线观看| 亚洲欧美精品一区| 午夜精品网站| 欧美一区二区视频在线| 亚洲欧美国产视频| 亚洲一区二区视频| 亚洲精品免费一区二区三区| 亚洲国产成人久久综合一区| 亚洲成在线观看| 在线免费观看成人网| 国产日韩欧美在线观看| 国产精品久久久久久久7电影| 国产精品久久久久久久久动漫 | 国产精品久久久久毛片软件| 欧美大片在线观看| 欧美国产日韩精品免费观看| 欧美日韩成人在线| 国产精品久久久久久久久久尿| 国产精品av久久久久久麻豆网| 国产最新精品精品你懂的| 国产在线精品一区二区中文| 一区二区在线观看av| 亚洲国产精品精华液2区45| 日韩视频永久免费| 亚洲一区二区在线免费观看视频| 欧美亚洲网站| 欧美福利视频| 国产精品亚洲аv天堂网| 国产精品国产三级国产aⅴ入口| 久久精品国产在热久久| 国产精品r级在线| 欧美日韩一区二区免费视频| 亚洲国产精品久久人人爱蜜臀 | 久久国内精品自在自线400部| 久久久久网址| 欧美激情第五页| 欧美日韩成人在线视频| 国产欧美日韩在线播放| 亚洲激情另类| 欧美一区二区三区精品| 欧美刺激性大交免费视频| 欧美日韩一视频区二区| 国内揄拍国内精品久久| 亚洲视频播放| 免费一级欧美片在线观看| 国产精品久久久久久久久动漫| 在线观看国产成人av片| 这里只有精品视频在线| 亚洲视频自拍偷拍| 久久久人成影片一区二区三区| 欧美另类久久久品| 伊人蜜桃色噜噜激情综合| 亚洲一区在线观看视频 | 国产美女诱惑一区二区| 精品粉嫩aⅴ一区二区三区四区| 亚洲人成在线影院| 欧美在线视频一区| 欧美精品在线看| 精品成人在线视频| 久久国产精品免费一区| 欧美体内she精视频| 在线观看亚洲精品| 欧美一区午夜精品| 欧美日韩免费观看一区二区三区| 国产一区二区三区四区老人| 亚洲一区二区三区在线| 欧美18av| 亚洲毛片在线看| 牛牛影视久久网| 亚洲最快最全在线视频| 欧美多人爱爱视频网站| 亚洲激情一区二区| 久久综合色婷婷| 伊人久久久大香线蕉综合直播| 欧美在线综合| 国产欧美一区二区精品婷婷| 99热这里只有精品8| 欧美国产三级| 日韩一级大片| 欧美日韩一二三四五区| 欧美一区亚洲一区| 国产一区二区日韩精品| 猛干欧美女孩| 在线欧美福利| 国产精品电影在线观看| 欧美一区二区三区视频在线| 国产精品日产欧美久久久久| 欧美一区二区三区视频| 国产一区二区三区无遮挡| 免费欧美电影| 亚洲精品在线三区| 国产视频在线观看一区| 午夜久久99| 国产亚洲精久久久久久| 久久国产加勒比精品无码| 国产亚洲制服色| 久色婷婷小香蕉久久| 国内外成人免费视频| 欧美日韩成人在线| 亚洲影院色无极综合| 国产视频精品xxxx| 久久久噜噜噜久噜久久| 国产午夜久久久久| 欧美日本精品| 午夜精品一区二区三区电影天堂| 日韩亚洲国产精品| 欧美午夜宅男影院在线观看| 久久久久国产免费免费| 久久亚洲综合网| 亚洲国产美女精品久久久久∴| 久久一本综合频道| 日韩写真在线| 国产精品最新自拍| 欧美精品久久一区二区| 亚洲性视频网址| 最新亚洲电影| 国产三级欧美三级| 国产精品久久久久久久午夜片| 欧美在线亚洲| 亚洲一区二区精品视频| 国产一区二区三区奇米久涩| 欧美午夜寂寞影院| 久久三级视频| 一区二区国产在线观看| 国产一区二区日韩| 欧美视频中文字幕在线| 欧美在线一区二区三区| 9久草视频在线视频精品| 激情另类综合| 国产精品扒开腿爽爽爽视频| 久久人人爽人人爽| 一区二区三区四区五区精品| 黄色另类av| 在线观看不卡| 国产欧美日韩综合| 国产精品视频第一区| 免费观看久久久4p| 老司机精品视频网站| 亚洲欧美视频在线观看视频| 午夜精品久久久久久久99樱桃| 亚洲精品国产视频| 99国产精品99久久久久久| 极品尤物av久久免费看 | 国产日本精品| 欧美日韩亚洲天堂| 蜜桃av久久久亚洲精品| 欧美亚洲自偷自偷| 欧美国产在线观看| 亚洲欧美日韩人成在线播放| 欧美+日本+国产+在线a∨观看| 午夜一区不卡| 国产精品专区第二| 国产精品国产a级| 欧美日韩三区四区| 裸体一区二区| 性欧美暴力猛交另类hd| 欧美在线视频免费| 亚洲一区视频在线观看视频| 亚洲自拍都市欧美小说| 一本色道久久综合亚洲精品小说| 在线亚洲国产精品网站| 99国产一区| 亚洲欧美成人网| 亚洲综合色噜噜狠狠| 久久久久www| 久久嫩草精品久久久久|