<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中的數(shù)組字符串下標的運用
                                                      
                                                           
    馬嘉楠 2006-11-09


    序:

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

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

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

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



    正文:

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

    首先,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也是可以用字符串做下標,像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中檢索出一個指定的值,通常做法,我們需要遍歷整個數(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ù)做下標的Array:哈哈! ^+^ \n "
    ;
            output 
    =  output  +   " "   +  i  +   " 次才找到\n "
    ;
            output 
    =  output  +   " arrayTest[ "   +  i  +   " ] =  "   +
     arrayTest[i];
            alert(output);
        }
    else
    {
            output 
    =   " 用整數(shù)做下標的Array:555555555 \n "
    ;
            output 
    =  output  +   " "   +  i  +   " 次沒有找到\n "
    ;
            output 
    =  output  +   " 找到的是arrayTest[ "   +  i  +   " ] =  "   +
     arrayTest[i]
            alert(output);
        }
    }


    code 4:

    // 使用字符串做數(shù)組下標
    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的字符串集合。
    遍歷用整數(shù)做下標的Array的時間復(fù)雜度是O(n),而遍歷用字符串做下標的Array的時間復(fù)雜度是O(1)。



    所有代碼:

     



    馬嘉楠
    jianan.ma@gmail.com

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

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

    這一段是不足以作為效率參考依據(jù)的,你沒有考慮Java腳本引擎在底層處理這兩種代碼的不同方式。
    以字符串作為下標給數(shù)組添加項目的時候,實際上是創(chuàng)建了一個特別的無序數(shù)組項,它本身沒有公有的自動給予的數(shù)字下標,(實際上數(shù)組內(nèi)部的私有數(shù)據(jù)里仍有對這個項目的唯一下標,)而值是一個特殊對象,它有一個標簽屬性為你指定的字符串下標,另外還有一個屬性用來存放你給這個項目指定的值。在用字符串下標進行數(shù)組項獲取的時候,數(shù)組內(nèi)部仍然要遍歷所有項目來檢索該項目,和數(shù)字下標沒有任何差別。另外,因為需要額外的空間來儲存標簽信息,用字符串下標儲存的項目要比數(shù)字下標占用更多內(nèi)存,在效率上反而低下。java腳本之所以提供這種功能,主要是為了方便編寫,但這種“偷懶”的方式本身是算不上高效的。希望提高代碼執(zhí)行效率的還是應(yīng)該從編譯原理本身去優(yōu)化代碼結(jié)構(gòu)。  回復(fù)  更多評論
      
    # re: 如何讓你的程序運行的更快 (2)--- JavaScript中的數(shù)組之字符串下標的運用 [未登錄]
    2013-05-13 11:10 | xxx
    這個不能稱之為下標吧 而是為對象添加屬性,,  回復(fù)  更多評論
      
    主站蜘蛛池模板: 99热亚洲色精品国产88| 在线观看免费人成视频色9| 亚洲AV色欲色欲WWW| 亚洲精品美女久久久久| 久久亚洲中文字幕精品一区四 | 亚洲1234区乱码| 亚洲国产一成人久久精品| 国产乱子伦片免费观看中字| 国产一卡二卡四卡免费| 日本在线免费播放| 中文字幕无线码中文字幕免费| 国产成人高清亚洲一区久久| 亚洲色中文字幕在线播放| 亚洲欧洲自拍拍偷综合| 亚洲三级电影网站| 亚洲av无码国产精品色午夜字幕| 亚洲熟妇少妇任你躁在线观看无码| 久久青草91免费观看| 一级特黄录像免费播放肥| 一级A毛片免费观看久久精品 | 亚洲Av永久无码精品一区二区| 亚洲国产精品线观看不卡| 亚洲国语精品自产拍在线观看 | 三级黄色免费观看| 久久www免费人成看国产片| 麻豆安全免费网址入口| 日韩精品无码免费视频| 色费女人18女人毛片免费视频| 久久亚洲欧美国产精品| 老子影院午夜伦不卡亚洲| 春暖花开亚洲性无区一区二区| 久久亚洲中文字幕无码| 美女免费视频一区二区三区| 激情吃奶吻胸免费视频xxxx| 青娱乐在线视频免费观看| 国产vA免费精品高清在线观看| 国产区在线免费观看| 在线观看免费黄网站| 外国成人网在线观看免费视频| 国产精品免费一区二区三区四区| 99热在线精品免费播放6|