<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

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


    序:

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

    在學(xué)習(xí)的過程中,好幾次都準(zhǔn)備寫了,可是每次動(dòng)筆的時(shí)候總會(huì)想,這個(gè)東西寫出來有意義么?如果是人所共知唯獨(dú)我不知道的,就算寫出來對(duì)大家也沒什么幫助,只能算是我的學(xué)習(xí)筆記罷了,放在這個(gè)下面顯然不合適。

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

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



    正文:

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

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

    新建: 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(); 二者等價(jià)
    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也是可以用字符串做下標(biāo),像code 1 中的 Object 一樣。

    code 2:

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

    delete  array[ " First "
    ]; 

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


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

    code 3:

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

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


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


    code 4:

    // 使用字符串做數(shù)組下標(biāo)
    var  arrayTest1  =  [];
    arrayTest1[
    " blog " =   " Blog "
    ;
    arrayTest1[
    " java " =   " Java "
    ;
    arrayTest1[
    " majianan " =   " MaJianan "


    var  key = " majianan "


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

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



    var  key1 = " hello "


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

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



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



    所有代碼:

     



    馬嘉楠
    jianan.ma@gmail.com

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

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

    這一段是不足以作為效率參考依據(jù)的,你沒有考慮Java腳本引擎在底層處理這兩種代碼的不同方式。
    以字符串作為下標(biāo)給數(shù)組添加項(xiàng)目的時(shí)候,實(shí)際上是創(chuàng)建了一個(gè)特別的無序數(shù)組項(xiàng),它本身沒有公有的自動(dòng)給予的數(shù)字下標(biāo),(實(shí)際上數(shù)組內(nèi)部的私有數(shù)據(jù)里仍有對(duì)這個(gè)項(xiàng)目的唯一下標(biāo),)而值是一個(gè)特殊對(duì)象,它有一個(gè)標(biāo)簽屬性為你指定的字符串下標(biāo),另外還有一個(gè)屬性用來存放你給這個(gè)項(xiàng)目指定的值。在用字符串下標(biāo)進(jìn)行數(shù)組項(xiàng)獲取的時(shí)候,數(shù)組內(nèi)部仍然要遍歷所有項(xiàng)目來檢索該項(xiàng)目,和數(shù)字下標(biāo)沒有任何差別。另外,因?yàn)樾枰~外的空間來儲(chǔ)存標(biāo)簽信息,用字符串下標(biāo)儲(chǔ)存的項(xiàng)目要比數(shù)字下標(biāo)占用更多內(nèi)存,在效率上反而低下。java腳本之所以提供這種功能,主要是為了方便編寫,但這種“偷懶”的方式本身是算不上高效的。希望提高代碼執(zhí)行效率的還是應(yīng)該從編譯原理本身去優(yōu)化代碼結(jié)構(gòu)。  回復(fù)  更多評(píng)論
      
    # re: 如何讓你的程序運(yùn)行的更快 (2)--- JavaScript中的數(shù)組之字符串下標(biāo)的運(yùn)用 [未登錄]
    2013-05-13 11:10 | xxx
    這個(gè)不能稱之為下標(biāo)吧 而是為對(duì)象添加屬性,,  回復(fù)  更多評(píng)論
      
    主站蜘蛛池模板: 国产精品亚洲专区无码牛牛| 99999久久久久久亚洲| 亚洲综合国产精品| 亚洲国产成人精品无码一区二区 | 亚洲精品在线免费观看视频| 亚洲国产午夜电影在线入口| 亚洲AV无码成人精品区狼人影院| 丰满妇女做a级毛片免费观看 | 91av免费观看| 手机在线免费视频| 亚洲女同成人AⅤ人片在线观看| 亚洲AV无码一区东京热久久| 日本亚洲精品色婷婷在线影院| 国产成人亚洲精品播放器下载 | 免费阿v网站在线观看g| 国产免费人成在线视频| 亚洲精品无码久久一线| 亚洲国产精品免费在线观看| 午夜亚洲乱码伦小说区69堂| 久别的草原电视剧免费观看| 无码中文在线二区免费| 在线观看亚洲精品福利片| 亚洲视频国产精品| 欧洲亚洲综合一区二区三区| 日本一区二区免费看| 大地资源二在线观看免费高清| 在线观看亚洲精品国产| 亚洲精品福利你懂| 国产国产人免费人成成免视频 | 国产免费女女脚奴视频网| 一本色道久久88亚洲综合| 亚洲天堂男人天堂| 激情小说亚洲图片| 久久午夜夜伦鲁鲁片免费无码影视 | 久久成人免费电影| 日韩免费在线观看| 亚洲精品自产拍在线观看动漫| 亚洲国产精品无码中文lv| 免费一区二区三区| 免费人成网站7777视频| 自怕偷自怕亚洲精品|