?????????? 如何让你的程序运行的更快
(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
>
?
posted on 2006-11-09 16:44
马嘉楠 阅读(144)
评论(0) 编辑 收藏 引用 收藏至365Key 所属分类:
Java Script