<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


    序:

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

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

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

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



    正文:

    今天在看到 JavaScript 中 Array 這一部分的時候,發(fā)現(xiàn)字符串也可以作為數(shù)組的下標(biāo),以前還真不知道,孤陋寡聞。。。。
    既然提供了這個特性,那么就有它的存在價值,我們來看看有什么用,歡迎大家補(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(); 二者等價
    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 = []; 二者等價
    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中檢索出一個指定的值,通常做法,我們需要遍歷整個數(shù)組,如下:

    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 
    =   " 用整數(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  +   " 明明沒有這個東西,還讓我找,耍我呢吧!!! "
    ;
        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  +   " 明明沒有這個東西,還讓我找,耍我呢吧!!! "
    ;
        alert(output);
        // do sth

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



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



    所有代碼:

     



    馬嘉楠
    jianan.ma@gmail.com

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

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

    這一段是不足以作為效率參考依據(jù)的,你沒有考慮Java腳本引擎在底層處理這兩種代碼的不同方式。
    以字符串作為下標(biāo)給數(shù)組添加項目的時候,實(shí)際上是創(chuàng)建了一個特別的無序數(shù)組項,它本身沒有公有的自動給予的數(shù)字下標(biāo),(實(shí)際上數(shù)組內(nèi)部的私有數(shù)據(jù)里仍有對這個項目的唯一下標(biāo),)而值是一個特殊對象,它有一個標(biāo)簽屬性為你指定的字符串下標(biāo),另外還有一個屬性用來存放你給這個項目指定的值。在用字符串下標(biāo)進(jìn)行數(shù)組項獲取的時候,數(shù)組內(nèi)部仍然要遍歷所有項目來檢索該項目,和數(shù)字下標(biāo)沒有任何差別。另外,因為需要額外的空間來儲存標(biāo)簽信息,用字符串下標(biāo)儲存的項目要比數(shù)字下標(biāo)占用更多內(nèi)存,在效率上反而低下。java腳本之所以提供這種功能,主要是為了方便編寫,但這種“偷懶”的方式本身是算不上高效的。希望提高代碼執(zhí)行效率的還是應(yīng)該從編譯原理本身去優(yōu)化代碼結(jié)構(gòu)。  回復(fù)  更多評論
      
    # re: 如何讓你的程序運(yùn)行的更快 (2)--- JavaScript中的數(shù)組之字符串下標(biāo)的運(yùn)用 [未登錄]
    2013-05-13 11:10 | xxx
    這個不能稱之為下標(biāo)吧 而是為對象添加屬性,,  回復(fù)  更多評論
      
    主站蜘蛛池模板: 99久久国产精品免费一区二区| 亚洲人成日本在线观看| 亚洲综合国产精品第一页| 亚洲成A人片77777国产| 亚洲国产成人久久综合区| 亚洲中文无韩国r级电影| 丁香亚洲综合五月天婷婷| 亚洲精品国产高清不卡在线| 亚洲精品国产精品国自产观看| 亚洲国产电影av在线网址| 亚洲国产午夜福利在线播放| 久久久久亚洲AV成人网人人软件| 亚洲熟妇无码AV在线播放| 亚洲国产成人精品无码区在线观看 | 2020久久精品亚洲热综合一本| 亚洲日本久久一区二区va| 亚洲精品无码久久久久APP| 豆国产96在线|亚洲| 久久免费香蕉视频| 久久精品国产免费一区| 69视频在线是免费观看| 国内精自视频品线六区免费| 最近中文字幕无免费视频| 国产一级淫片a免费播放口之| 又粗又大又长又爽免费视频| 国产成人亚洲精品91专区手机| 亚洲大成色www永久网站| 亚洲自偷自拍另类图片二区| 亚洲精品中文字幕无码A片老| 国产精品亚洲综合| 美女巨胸喷奶水视频www免费| 巨波霸乳在线永久免费视频| 四虎影视免费在线| 亚洲精品无码专区久久同性男| 亚洲gv白嫩小受在线观看| 亚洲一区在线观看视频| 特级毛片免费观看视频| 男人的天堂网免费网站| 免费在线观看的网站| 亚洲偷自拍拍综合网| 亚洲色偷偷av男人的天堂|