如何讓你的程序運行的更快 (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)。
所有代碼:
< SCRIPT LANGUAGE ="JavaScript" >
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也是可以用字符串做下標的
var array = new 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]);
// 通常做法如下:
var arrayTest = new Array(); // var arrayTest = []; 二者等價
arrayTest.push( " Blog " );
arrayTest.push( " Java " );
// arrayTest.push("Third");
arrayTest[ 2 ] = " MaJianan " ;
var output = "" ;
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);
}
}
// 使用字符串做數組下標
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
}
</ SCRIPT >
馬嘉楠
jianan.ma@gmail.com
posted on 2006-11-09 16:44
馬嘉楠 閱讀(5202)
評論(4) 編輯 收藏 所屬分類:
Java Script