<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Oo緣來是你oO


    posts - 120,comments - 125,trackbacks - 0

               如何讓你的程序運行的更快 (2)--- JavaScript中的數組字符串下標的運用
                                                      
                                                           
    馬嘉楠 2006-11-09


    序:

    好久沒有寫這個系列的文章了,不知道還有沒有人等我的下文。哈哈,臭美一個。

    在學習的過程中,好幾次都準備寫了,可是每次動筆的時候總會想,這個東西寫出來有意義么?如果是人所共知唯獨我不知道的,就算寫出來對大家也沒什么幫助,只能算是我的學習筆記罷了,放在這個下面顯然不合適。

    厚積薄發,希望每一篇文章都能對大家有所幫助(真希望每一篇都是精品,可惜水平有限?。?,由于我也是初學者,文中的東西可能比較適合新手,如果有錯誤,請告知,謝謝。

    如何讓你的程序運行的更快(1) 中,講了Java 中的 String StringBuffer,這里又跳到 JavaScript Array,呵呵,學到哪,就寫到哪吧。



    正文:

    今天在看到 JavaScript 中 Array 這一部分的時候,發現字符串也可以作為數組的下標,以前還真不知道,孤陋寡聞。。。。
    既然提供了這個特性,那么就有它的存在價值,我們來看看有什么用,歡迎大家補充。

    首先,Array 是從 Object 繼承下來,所以 Array 具有 Object 有的任何能力??纯碠bject作為集合的情況:

    新建: var  object  =   new  Object(); 或  var  object  =  {};
    增加: object[strIndex ] 
    =
     value; (strIndex 為string)
    刪除:
    delete
     object[strIndex ];
    遍歷:
    for  (  var  strObjIndex  in  object ) object[strObjIndex ]; 

    code 1:

    var  object  =  {};    // var object = new Object(); 二者等價
    object[ " First " =   " Firstmm " ;
    object[
    " Second " =   " Secondmm "
    ;
    object[
    " Third " =   " Thirdmm "
    ;
    delete  object[ " Second "
    ]; 

    for  (  var strObjIndex in
    object )
        alert(
    " strObjIndex = " + strObjIndex + "\nobject[" +strObjIndex + "] = "+
    object[strObjIndex]); 


    除了我們熟悉的方法外,Array也是可以用字符串做下標,像code 1 中的 Object 一樣。

    code 2:

    var  array  =   new  Array();    // var array = []; 二者等價
    array[ " First " =   " Firstgg " ;
    array[
    " Second " =   " Secondgg "
    ;
    array[
    " Third " =   " Thirdgg "

    delete  array[ " First "
    ]; 

    for  (  var  strArrayIndex  in
     array )
        alert(
    " strArrayIndex =  " + strArrayIndex + "\narray[" +strArrayIndex + "] = " + array[strArrayIndex]); 


    在某些情況下,用字符串做下標可以提高我們的訪問效率,
    例如我們要在Array中檢索出一個指定的值,通常做法,我們需要遍歷整個數組,如下:

    code 3:

    var  arrayTest  =   new  Array();    // var arrayTest = []; 二者等價
    //
    初始化arrayTest
    arrayTest.push( " Blog " );           // arrayTest[0] = "Blog"; 二者等價
    arrayTest.push( " Java " );
    arrayTest.push(
    " MaJianan "
    );

    var  output  =   "" ;    // 用于輸出


    // 我們需要檢索出值為 Majianan 的元素,通常做法如下:
    for ( var  i = 0 ; i < arrayTest.length;i ++ ){
        if (arrayTest[i] == " MaJianan "
    ){
            output 
    =   " 用整數做下標的Array:哈哈! ^+^ \n "
    ;
            output 
    =  output  +   " "   +  i  +   " 次才找到\n "
    ;
            output 
    =  output  +   " arrayTest[ "   +  i  +   " ] =  "   +
     arrayTest[i];
            alert(output);
        }
    else
    {
            output 
    =   " 用整數做下標的Array:555555555 \n "
    ;
            output 
    =  output  +   " "   +  i  +   " 次沒有找到\n "
    ;
            output 
    =  output  +   " 找到的是arrayTest[ "   +  i  +   " ] =  "   +
     arrayTest[i]
            alert(output);
        }
    }


    code 4:

    // 使用字符串做數組下標
    var  arrayTest1  =  [];
    arrayTest1[
    " blog " =   " Blog "
    ;
    arrayTest1[
    " java " =   " Java "
    ;
    arrayTest1[
    " majianan " =   " MaJianan "


    var  key = " majianan "


    if ( typeof (arrayTest1[key]) == " undefined "
    ){
        output 
    =   " 用字符串做下標的Array:555555555 \n "
    ;
        output 
    =  output  +   " 沒找到下標為 "   +  key  +   " 的東東。\n "
    ;
        output 
    =  output  +   " 明明沒有這個東西,還讓我找,耍我呢吧?。?! "
    ;
        alert(output);
        // do sth

    } else {
        output 
    =   " 用字符串做下標的Array:哈哈! ^+^ 一次搞定\n "
    ;
        output 
    =  output  +   " 找到arrayTest1[ "   +  key  +   " ] =  "   +
     arrayTest1[key];
        alert(output);
        // do sth



    var  key1 = " hello "


    if ( typeof (array[key1]) == " undefined "
    ){
        output 
    =   " 用字符串做下標的Array:555555555 \n "
    ;
        output 
    =  output  +   " 沒找到下標為 "   +  key1  +   " 的東東。\n "
    ;
        output 
    =  output  +   " 明明沒有這個東西,還讓我找,耍我呢吧!!! "
    ;
        alert(output);
        // do sth

    } else {
        output 
    =   " 用字符串做下標的Array:哈哈! ^+^ 一次搞定\n "
    ;
        output 
    =  output  +   " 找到arrayTest1[ "   +  key1  +   " ] =  "   +
     arrayTest1[key1];
        alert(output);
        // do sth



    Array的這個特性(用字符串做下標)可以用來高效的檢索Unique的字符串集合。
    遍歷用整數做下標的Array的時間復雜度是O(n),而遍歷用字符串做下標的Array的時間復雜度是O(1)。



    所有代碼:

     



    馬嘉楠
    jianan.ma@gmail.com

    posted on 2006-11-09 16:44 馬嘉楠 閱讀(5202) 評論(4)  編輯  收藏 所屬分類: Java Script

    FeedBack:
    # re: 如何讓你的程序運行的更快 (2)--- JavaScript中的數組之字符串下標的運用
    2007-09-12 02:09 | 李曉曉
    雖然我一個沒有看懂,不過你真的好強哦。= =  回復  更多評論
      
    # re: 如何讓你的程序運行的更快 (2)--- JavaScript中的數組之字符串下標的運用 [未登錄]
    2008-08-12 11:16 | James
    寫的不錯哦,很有保存價值,
    今天又學了點小知識,哈哈  回復  更多評論
      
    # re: 如何讓你的程序運行的更快 (2)--- JavaScript中的數組之字符串下標的運用
    2011-07-15 18:14 | Tingo
    "遍歷用整數做下標的Array的時間復雜度是O(n),而遍歷用字符串做下標的Array的時間復雜度是O(1)。"

    這一段是不足以作為效率參考依據的,你沒有考慮Java腳本引擎在底層處理這兩種代碼的不同方式。
    以字符串作為下標給數組添加項目的時候,實際上是創建了一個特別的無序數組項,它本身沒有公有的自動給予的數字下標,(實際上數組內部的私有數據里仍有對這個項目的唯一下標,)而值是一個特殊對象,它有一個標簽屬性為你指定的字符串下標,另外還有一個屬性用來存放你給這個項目指定的值。在用字符串下標進行數組項獲取的時候,數組內部仍然要遍歷所有項目來檢索該項目,和數字下標沒有任何差別。另外,因為需要額外的空間來儲存標簽信息,用字符串下標儲存的項目要比數字下標占用更多內存,在效率上反而低下。java腳本之所以提供這種功能,主要是為了方便編寫,但這種“偷懶”的方式本身是算不上高效的。希望提高代碼執行效率的還是應該從編譯原理本身去優化代碼結構。  回復  更多評論
      
    # re: 如何讓你的程序運行的更快 (2)--- JavaScript中的數組之字符串下標的運用 [未登錄]
    2013-05-13 11:10 | xxx
    這個不能稱之為下標吧 而是為對象添加屬性,,  回復  更多評論
      
    主站蜘蛛池模板: 亚洲一卡2卡三卡4卡无卡下载| 又粗又硬又大又爽免费视频播放| 日韩免费在线观看视频| 成人A毛片免费观看网站| 国产VA免费精品高清在线| 国产99精品一区二区三区免费| 又粗又长又爽又长黄免费视频 | 亚洲成a人片在线播放| 凹凸精品视频分类国产品免费| 国产成人免费a在线视频app| 国产hs免费高清在线观看| 久久精品国产亚洲AV不卡| 亚洲色婷婷综合久久| 久久亚洲精品中文字幕无码| 久久亚洲精品中文字幕| 亚洲一区电影在线观看| 成人区精品一区二区不卡亚洲| 亚洲精品天堂无码中文字幕| 色屁屁在线观看视频免费| 国产精品无码免费专区午夜| 久久精品免费观看国产| 青青青国产在线观看免费| 破了亲妺妺的处免费视频国产| 免费一级毛片清高播放| 亚洲VA中文字幕无码毛片| 亚洲成a人片在线观看播放| 亚洲精品中文字幕| 一个人看www免费高清字幕| 鲁丝片一区二区三区免费| 欧洲一级毛片免费| 国产色婷婷精品免费视频| 亚洲午夜日韩高清一区| 亚洲一区二区电影| 亚洲人成人网站18禁| 一级毛片免费播放试看60分钟| 日本一道本不卡免费| 成年女人免费视频播放77777| 亚洲精品无码成人片在线观看 | 日本高清免费不卡视频| 亚洲日韩乱码中文无码蜜桃臀网站 | 国产精品视频白浆免费视频|