JavaScript数组

 JavaScript的数组更像是将很多东西混合在一起的结果。传统的程序设计语言中,数组内的元素需要具有相同的数据类型,而作为弱类型的JavaScript,则没有这个限制,JavaScript的同一个数组中,可以有各种完全不同类型的元素。

方法:

concat()              连接两个或更多的数组,并返回结果

join()                  把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔

pop()                   删除并返回数组的最后一个元素。

push()                向数组的末尾添加一个或更多元素,并返回新的长度

reverse()            颠倒数组中元素的顺序

shift()                  删除并返回数组的第一个元素

slice()                 从某个已有的数组返回选定的元素

sort()                 对数组的元素进行排序

splice()             删除元素,并向数组添加新元素

unshift()             向数组的开头添加一个或更多元素,并返回新的长度。

valueOf()            返回数组对象的原始值


JavaScript的数组对象比较复杂,包含有pop,push等类似与栈的操作,又有slice,reverse,sort这样类似与列表的操作。

或许正如此,JavaScript中的数组的功能非常强大


1.数组的特性

   最常用的属性为length,length表示当前数组的长度

var array =new Array(1,2,3,4,5);

print(array.length);

array.length=3;

print(array.length);

5

3

对lenght属性的修改会使得数组后边的元素变得不可用(如果修改后的length比数组实际的长度小的话),所以可以通过设置length属性来将数组元素裁剪。

另一个与其他语言的数组不同的是,字符串也可以作为数组的下标(实际上,在JavaScript的数组中,数字下标最终会被解释器转化为字符串,也就是说,所谓的数字下标只不过是看着像数字而实际上是字符的属性名),比如:

var stack = new Array();

stack['first']=3.14;

stack["second"]="okay then";

stack['third'] = new Date();

for(var item in stack){

  print(typeof stack[item]);

}

运行结果为:

number

string

object

2.使用数组

数组的创建方式:

var array =new Array();

var array= new Array(10);   //长度

var  array=new Array("apple","borland","cisco");

不过运用最多的为字面量方式来创建,

var array =[];

var array=["one","two","three","four"];

向数组中添加元素:

var array=[];

array.push(1);

array.push(2);

array.push(3);

array.push("four");

array.push("five");

array.push(3.1415);



joind,连接数组元素为一个字符串:

array = ["one","two","three","four","five"];

var str1 = array.join(",");

var str2 =array.join("|");

print(str1);

print(str2);

运行结果如下:

one,two,three,four,five

one|two|three|four|five

连接多个数组为一个数组:

 

var another=["this","is","anther","array"];

var another2 = ["yet","another","array"];

var bigArray =array.concat(another,another2);


从数组中取出一定数量的元素,不影响数组本身:

print(bigArray,slice(5,9));

slice方法的第一个参数为其实位置,第二个参数为终止位置,操作不影响数组本身。


bigArray.splice(5,2);

bigArray.splice(5,0,"very","new","item","here");

第一行代码表示,从bigArray数组中,从第5个元素起,删除2个元素;而第二行代码表示,从第5哥元素起,删除0个元素,并把随后的所有参数插入到从第5个开始的位置。


sort()将数组按字母顺序排序,排序过程会影响源数组。


sort不关注数组中的内容是数字还是字母,他仅仅是按照字母的字典序来进行排序,对于这种情况,JavaScript提供了另一种途径,通过给sort函数传递一个函数对象,按照这个函数提供的规则对数组进行排序。


function sorter(a,b) {

      return a-b;

      }

var array= [10,23,44,58,106,235];

array.sort(sorter);

print(array);

函数sorter接受两个参数,返回一个数值,如果这个值大于0,则说明第一个参数大于第二个参数,如果返回值为0,说明两个参数相等,返回值小于0,则第一个参数小于第二个参数,sort根据这个返回值来进行最终的排序:


array,sort(function(a,b){  return a-b;});  //正序

array.sort(function(a,b){ return b-a;});  //逆序


删除数组元素


来自于jQuery的设计:


Array.prototype.remove=function(from,to){

       var rest = this.slice((to||from)+1||this.length);

       this.length=from<0?this.length + from :from;

        return this.push.apply(this,rest);

     }

     remove接受两个参数,第一个参数为其实下标,第二个参数为结束下标,其中第二个参数可以忽略,这种情况下会删除指定下表的元素。当然,不是每个人都希望影响整个原形链,

    Array.remove = function(array,from,to) {

       var rest  =array.slice((to||from)+1||array.length);

       array.length = from <0? array.length + from :from;

       return array.push.apply(array,rest);

       };

其操作方式与前者并无二致,但是不影响全局对象,代价是你需要显式的传递需要操作的数组作为第一个参数:


var array= ["one","two,"three","four"];

Array.remove(array,0,2);    //删除0,1,2三个元素

print(array);

这种方式相当于JavaScript内置的Array添加了一个静态方法。


3.  遍历数组

var array= [1,2,3,4];

for(var item in array) {

     print(array[item]);

     }


但是这种方式并不总是有效,比如我们扩展了内置对象Array,如下:

Array.prototype.useless =function(){ }

执行上边的代码,会得到这样的输出:

1

2

3

4

function() {  }

如果你对数组的遍历做sum操作,那么会得到一个莫名其妙的错误,毕竟函数对象不能做求和操作。

因此,我们可以采用另一种遍历方式

for(var i =0,len = array,length; i<len; i++)

     {

       print(array[I]);

       }

    这种for循环如其他很多语言中的写法一致,重要的是,他不会访问那些下标不是数字的元素,如上例中的unction

  。从此也可以看出,除非必要,尽量不要对全局对象进行扩展,因为对全局对象的扩展会造成所有继承链上都带上“烙印”,

   从未导致未知的bug


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值