最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

javascript數(shù)組去重方法匯總

 更新時間:2015年04月23日 10:21:57   投稿:hebedich  
數(shù)組去重復(fù)是一個常見的需求,我們暫時考慮同類型的數(shù)組去重復(fù)。主要是理清思路和考慮下性能。以下方法,網(wǎng)上基本都有,這里只是簡單地總結(jié)一下。

javascript數(shù)組去重方法匯總

Array.prototype.unique1 = function () {
 var n = []; //一個新的臨時數(shù)組
 for (var i = 0; i < this.length; i++) //遍歷當(dāng)前數(shù)組
 {
  //如果當(dāng)前數(shù)組的第i已經(jīng)保存進了臨時數(shù)組,那么跳過,
  //否則把當(dāng)前項push到臨時數(shù)組里面
  if (n.indexOf(this[i]) == -1) n.push(this[i]);
 }
 return n;
};
Array.prototype.unique2 = function()
{
  var n = {},r=[]; //n為hash表,r為臨時數(shù)組
  for(var i = 0; i < this.length; i++) //遍歷當(dāng)前數(shù)組
  {
    if (!n[this[i]]) //如果hash表中沒有當(dāng)前項
    {
      n[this[i]] = true; //存入hash表
      r.push(this[i]); //把當(dāng)前數(shù)組的當(dāng)前項push到臨時數(shù)組里面
    }
  }
  return r;
};
Array.prototype.unique3 = function()
{
  var n = [this[0]]; //結(jié)果數(shù)組
  for(var i = 1; i < this.length; i++) //從第二項開始遍歷
  {
    //如果當(dāng)前數(shù)組的第i項在當(dāng)前數(shù)組中第一次出現(xiàn)的位置不是i,
    //那么表示第i項是重復(fù)的,忽略掉。否則存入結(jié)果數(shù)組
    if (this.indexOf(this[i]) == i) n.push(this[i]);
  }
  return n;
};
Array.prototype.unique4 = function()
{
  this.sort();
  var re=[this[0]];
  for(var i = 1; i < this.length; i++)
  {
    if( this[i] !== re[re.length-1])
    {
      re.push(this[i]);
    }
  }
  return re;
};
var arr = [1,2,2,2,3,3,4,5];
console.log(arr.unique1()); // [1, 2, 3, 4, 5]
console.log(arr.unique2()); // [1, 2, 3, 4, 5]
console.log(arr.unique3()); // [1, 2, 3, 4, 5]
console.log(arr.unique4()); // [1, 2, 3, 4, 5]

其中第1種和第3種方法都用到了數(shù)組的indexOf方法。此方法的目的是尋找存入?yún)?shù)在數(shù)組中第一次出現(xiàn)的位置。很顯然,js引擎在實現(xiàn)這個方法的時候會遍歷數(shù)組直到找到目標(biāo)為止。所以此函數(shù)會浪費掉很多時間。 而第2中方法用的是hash表。把已經(jīng)出現(xiàn)過的通過下標(biāo)的形式存入一個object內(nèi)。下標(biāo)的引用要比用indexOf搜索數(shù)組快的多。

第四種方法的思路是先把數(shù)組排序,然后比較相鄰的兩個值。 排序的時候用的JS原生的sort方法,JS引擎內(nèi)部應(yīng)該是用的快速排序吧。 最終測試的結(jié)果是此方法運行時間平均是第二種方法的三倍左右,不過比第一種和第三種方法快了不少。

以上所述就是本文的全部內(nèi)容了,希望大家能夠喜歡。

相關(guān)文章

  • 整理Javascript數(shù)組學(xué)習(xí)筆記

    整理Javascript數(shù)組學(xué)習(xí)筆記

    整理Javascript數(shù)組學(xué)習(xí)筆記,之前一系列的文章是跟我學(xué)習(xí)Javascript,本文就是進一步學(xué)習(xí)javascript數(shù)組,希望大家繼續(xù)關(guān)注
    2015-11-11
  • JS文字球狀放大效果代碼分享

    JS文字球狀放大效果代碼分享

    這篇文章主要展示了JS文字球狀放大效果,和放大鏡放大文字一樣,很神奇的代碼,感興趣的小伙伴們可以參考一下
    2015-08-08
  • 微信小程序獲取用戶信息的兩種方法wx.getUserInfo與open-data實例分析

    微信小程序獲取用戶信息的兩種方法wx.getUserInfo與open-data實例分析

    這篇文章主要介紹了微信小程序獲取用戶信息的兩種方法wx.getUserInfo與open-data,結(jié)合實例形式分析了wx.getUserInfo與open-data獲取用戶信息的相關(guān)操作技巧與使用注意事項,需要的朋友可以參考下
    2019-05-05
  • js中Object.defineProperty()方法的不詳解

    js中Object.defineProperty()方法的不詳解

    這篇文章主要介紹了js中Object.defineProperty()方法的不詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • JavaScript實現(xiàn)圖片放大預(yù)覽效果

    JavaScript實現(xiàn)圖片放大預(yù)覽效果

    這篇文章主要介紹了JavaScript實現(xiàn)圖片放大預(yù)覽效果,幫助大家更好的理解和制作JavaScript特效,感興趣的朋友可以了解下
    2020-11-11
  • javascript函數(shù)式編程程序員的工具集

    javascript函數(shù)式編程程序員的工具集

    函數(shù)式編程語言一向被認為是比其它編程語言更高深的語言。一是因為函數(shù)式編程語言的語法很另類,比如Lisp語言,二是因為函數(shù)式編程語言都很古老,比如Schema語言。在如今面向?qū)ο笳Z言大行其道的時代,函數(shù)式編程語言有其特殊的優(yōu)勢
    2015-10-10
  • 枚舉的實現(xiàn)求得1-1000所有出現(xiàn)1的數(shù)字并計算出現(xiàn)1的個數(shù)

    枚舉的實現(xiàn)求得1-1000所有出現(xiàn)1的數(shù)字并計算出現(xiàn)1的個數(shù)

    求得1-1000所有出現(xiàn)1的數(shù)字,并計算出現(xiàn)1的個數(shù),以下是采用枚舉的實現(xiàn)方法,但是若從1-N就不管用了,因為N不一定會是多少
    2013-09-09
  • js操作iframe的一些方法介紹

    js操作iframe的一些方法介紹

    本篇文章介紹了js操作iframe的一些方法的實例代碼與步驟,有需要的朋友可以參考一下
    2013-06-06
  • 原生js編寫貪吃蛇小游戲

    原生js編寫貪吃蛇小游戲

    這篇文章主要為大家詳細介紹了原生js編寫貪吃蛇小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • replace()方法查找字符使用示例

    replace()方法查找字符使用示例

    查找字符的情況下會使用replace()方法,此方法很常見也很實用,下面有個不錯的示例,感興趣的朋友可以參考下,希望對大家有所把幫助
    2013-10-10

最新評論

雷州市| 库伦旗| 菏泽市| 涿鹿县| 景洪市| 麻江县| 临漳县| 蓬溪县| 西乡县| 阿城市| 东丰县| 资中县| 山西省| 瓦房店市| 广安市| 高邑县| 科技| 沐川县| 分宜县| 盐津县| 泽州县| 乐陵市| 河间市| 云林县| 简阳市| 洛南县| 陕西省| 阳高县| 札达县| 阳谷县| 长兴县| 河津市| 古丈县| 安仁县| 固阳县| 辽源市| 沾化县| 平遥县| 安宁市| 若羌县| 蓝田县|