如何如何让你的程序运行的更快 (2)--- JavaScript中的数组之字符串下标的运用

如何让你的程序运行的更快 (2)--- JavaScript中的数组字符串下标的运用 
                                                   
                        
马嘉楠 2006-11-09


序:

好久没有写这个系列的文章了,不知道还有没有人等我的下文。哈哈,臭美一个。

在学习的过程中,好几次都准备写了,可是每次动笔的时候总会想,这个东西写出来有意义么?如果是人所共知唯独我不知道的,就算写出来对大家也没什么帮助,只能算是我的学习笔记罢了,放在这个下面显然不合适。

厚积薄发,希望每一篇文章都能对大家有所帮助(真希望每一篇都是精品,可惜水平有限啊),由于我也是初学者,文中的东西可能比较适合新手,如果有错误,请告知,谢谢。

如何让你的程序运行的更快(1) 中,讲了Java 中的 String StringBuffer,这里又跳到 JavaScript Array,呵呵,学到哪,就写到哪吧。



正文:

今天在看到 JavaScript 中 Array 这一部分的时候,发现字符串也可以作为数组的下标,以前还真不知道,孤陋寡闻。。。。
既然提供了这个特性,那么就有它的存在价值,我们来看看有什么用,欢迎大家补充。

首先,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 arrayTest = []; 二者等价
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  =   "" ;    // 用于输出


// 我们需要检索出值为 Second 的元素,通常做法如下:
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 >

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值