江山壮美

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

1、 数组的创建 var arrayObj = new Array(); //创建一个数组

var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限,是长度

var arrayObj = new Array([element0[, element1[, ...[, elementN]]]]); 创建一个数组并赋值 要说明的是,虽然第二种方法创建数组指定了长度,但实际上所有情况下数组都是变长的,也就是说即使指定了长度为5,仍然可以将元素存储在规定长度以外的,注意:这时长度会随之改变。

2、数组的元素的访问 var testGetArrValue=arrayObj[1]; //获取数组的元素值

arrayObj[1]= "这是新值"; //给数组元素赋予新的值

3、数组元素的添加 arrayObj. push([item1 [item2 [. . . [itemN ]]]]);// 将一个或多个新元素添加到数组结尾,并返回数组新长度

arrayObj.unshift([item1 [item2 [. . . [itemN ]]]]);// 将一个或多个新元素添加到数组开始,数组中的元素自动后移,返回数组新长度

arrayObj.splice(insertPos,0,[item1[, item2[, . . . [,itemN]]]]);//将一个或多个新元素插入到数组的指定位置,插入位置的元素自动后移,返回""

4、数组元素的删除 arrayObj.pop(); //移除最后一个元素并返回该元素值

arrayObj.shift(); //移除最前一个元素并返回该元素值,数组中元素自动前移

arrayObj.splice(deletePos,deleteCount); //删除从指定位置deletePos开始的指定数量deleteCount的元素,数组形式返回所移除的元素

5、数组的截取和合并

arrayObj.slice(start, [end]); //以数组的形式返回数组的一部分,注意不包括 end 对应的元素,如果省略 end 将复制 start 之后的所有元素

arrayObj.concat([item1[, item2[, . . . [,itemN]]]]); //将多个数组(也可以是字符串,或者是数组和字符串的混合)连接为一个数组,返回连接好的新的数组 整理:www.mls169.com

6、数组的拷贝 arrayObj.slice(0); //返回数组的拷贝数组,注意是一个新的数组,不是指向

arrayObj.concat(); //返回数组的拷贝数组,注意是一个新的数组,不是指向

7、数组元素的排序 arrayObj.reverse(); //反转元素(最前的排到最后、最后的排到最前),返回数组地址

arrayObj.sort(); //对数组元素排序,返回数组地址 8、数组元素的字符串化

arrayObj.join(separator); //返回字符串,这个字符串将数组的每一个元素值连接在一起,中间用 separator 隔开。 toLocaleString toString valueOf:可以看作是join的特殊用法,不常用

2、 shift:删除原数组第一项,并返回删除元素的值;如果数组为空则返回undefined  var a = [1,2,3,4,5];  var b = a.shift(); //a[2,3,4,5] b1

3、 unshift:将参数添加到原数组开头,并返回数组的长度  var a = [1,2,3,4,5];  var b = a.unshift(-2,-1); //a[-2,-1,1,2,3,4,5] b 注:在IE6.0下测试返回值总为undefinedFF2.0下测试返回值为7,所以这个方法的返回值不可靠,需要用返回值时可用splice代替本方法来使用。

4、 pop:删除原数组最后一项,并返回删除元素的值;如果数组为空则返回undefined  var a = [1,2,3,4,5];  var b = a.pop(); //a[1,2,3,4] b5

5、 push:将参数添加到原数组末尾,并返回数组的长度  var a = [1,2,3,4,5];  var b = a.push(6,7); //a[1,2,3,4,5,6,7] b7

6、 concat:返回一个新数组,是将参数添加到原数组中构成的  var a = [1,2,3,4,5];  var b = a.concat(6,7); //a[1,2,3,4,5] b[1,2,3,4,5,6,7]

7、 splice(start,deleteCount,val1,val2,...):从start位置开始删除deleteCount项,并从该位置起插入val1,val2,...  var a = [1,2,3,4,5];  var b = a.splice(2,2,7,8,9); //a[1,2,7,8,9,5] b[3,4]  var b = a.splice(0,1); //shift  a.splice(0,0,-2,-1); var b = a.length; //unshift  var b = a.splice(a.length-1,1); //pop  a.splice(a.length,0,6,7); var b = a.length; //push

8、 reverse:将数组反序  var a = [1,2,3,4,5];  var b = a.reverse(); //a[5,4,3,2,1] b[5,4,3,2,1]

9、 sort(orderfunction):按指定的参数对数组进行排序  var a = [1,2,3,4,5];  var b = a.sort(); //a[1,2,3,4,5] b[1,2,3,4,5]

10、 slice(start,end):返回从原数组中指定开始下标到结束下标之间的项组成的新数组  var a = [1,2,3,4,5];  var b = a.slice(2,5); //a[1,2,3,4,5] b[3,4,5]

11、 join(separator):将数组的元素组起一个字符串,以separator为分隔符,省略的话则用默认用逗号为分隔符  var a = [1,2,3,4,5];  var b = a.join("|"); //a[1,2,3,4,5] b"1|2|3|4|5"

12、 数组是JavaScript提供的一个内部对象,它是一个标准的集合,我们可以添加(push)、删除(shift)里面元素,我们还可以通过for循环遍历里面的元素,那么除了数组我们在JavaScript里还可以有别的集合吗?

13、   由于JavaScript的语言特性,我们可以向通用对象动态添加和删除属性。所以Object也可以看成是JS的一种特殊的集合。下面比较一下ArrayObject的特性:

14、   Array:

15、 新建:var ary = new Array(); 或 var ary = [];  增加:ary.push(value);  删除:delete ary[n];  遍历:for ( var i=0 ; i < ary.length ; ++i ) ary[i];

16、   Object:

17、 新建:var obj = new Object(); 或 var obj = {};  增加:obj[key] = value; (keystring)  删除:delete obj[key];  遍历:for ( var key in obj ) obj[key];

18、   从上面的比较可以看出Object完全可以作为一个集合来使用,在使用Popup窗口创建无限级Web页菜单(3)中我介绍过Eric实现的那个__MenuCache__,它也就是一个模拟的集合对象。

19、   如果我们要在Array中检索出一个指定的值,我们需要遍历整个数组:

20、    代码:  var keyword = ;    for ( var i=0 ; i < ary.length ; ++i )       if ( ary[i] == keyword )       // todo       }

21、   而我们在Object中检索一个指定的key的条目,只需要是要使用:

22、    代码:  var key = '';    var value = obj[key];    // todo

23、  Object的这个特性可以用来高效的检索Unique的字符串集合,遍历Array的时间复杂度是O(n),而遍历Object的时间复杂度是O(1)。虽然对于10000次集合的for检索代价也就几十ms,可是如果是1000*1000次检索或更多,使用Object的优势一下就体现出来了。在此之前我做了一个mapping,把100Unique的字符mapping1000个字符串数组上,耗时25-30s!后来把for遍历改成了Object模拟的集合的成员引用,同样的数据量mapping,耗时仅1.7-2s!!!

24、   对于集合的遍历效率(从高到低):var value = obj[key]; > for ( ; ; ) > for ( in )。效率最差的就是for( in )了,如果集合过大,尽量不要使用for ( in )遍历。

posted on 2014-01-13 12:38  江山壮美  阅读(172)  评论(0)    收藏  举报