作为一门动态脚本语言,javascript真的是非常地易用。它的数组非常灵活,并且方法也很多,用起来较为方便。
javascript的数组的创建
js真的是一门很随性的语言啊,比如在创建数组的时候就反映出来了,我想怎么创就怎么创,我想创什么就创什么。
比如现在我想创建一个数组,但我不确定要给它开辟多少内存空间。没关系!因为你创建一个数组内容,它就会给你开辟一个内存空间。
var arr=new Array();
索性我连new都不要了:
var arr=Array();
好吧,事实上这样写会导致阅读不方便,所以就不要偷懒了。
或者直接:
var arr=[];
就是如此任性好嘛!
那如果我想要添加内容呢?
var arr=new Array("hello","world");
var arr=["hello","world"];
甚至一个数组里什么都有都可以!
var arr=["hello",3,true];
如果想要创建一个空间已知的数组也很方便:
var arr=new Array(10);
这样直接创建了一个可以存放十个内容的数组。
javascript数组的增减
还是不得不感慨js实在是太灵活了。
var arr=[];
arr[0]=1;
arr[1]=2;
alert(arr[0]);//1
这样子就是为arr数组添加了两个内容。
var arr=[1,2,3,4,5];
arr[2]=20;
alert(arr[2]);//20
修改起来也很方便。
var arr=[1,2,3];
arr[99]=9090;
alert(arr[99]);//9090
如果本身只有3个内存空间,但是你创建了一个标记为99的数组内容,那么它会自动给你补全到99,不过在2-99之间的都是undefined;
另外为了模拟队列和栈的结构,它也提供了一些增减的方法。
栈方法
栈是一种后进先出的数据结构,要模拟这种方式,数组的增减就应该是增加在数组末尾,删除数组末尾的项。
js为我们提供了两个方法push()和pop();
push是向末尾添加。
var arr=[1,2,3];
arr.push(6);
//arr=[1,2,3,6];
pop是删除数组的最后一项,array.pop()是取得最后一项。
var arr=[1,2,3,4];
var arr1=arr.pop();
//arr=[1,2,3];
//arr1=4;
队列模式
队列是先进先出的模式。要模拟这种模式,数组的增减应该是在末尾添加,在起始位置删除。js提供了shift的方法,它能移除数组的第一项并返回该项。和push合作就形成了队列的模式。
var arr=[1,2,3];
arr.shift();
//arr=[2,3];
另外提供了unshift的方法,可以在前端插入多个数据,因此与pop结合可以成为反方向的队列模式。
重排序方法
其中的reverse方法是将数组反向排序。
另外还有一个sort的方法,可以按照自己的规则来排序。
下面是按照从小到大的顺序排列:
function compare(value1,value2){
if(value1>value2){return 1}
else if(value1<value2){return -1}
else {return 0}
}
var arr=[4,6,23,54,3,2,4];
arr.sort(compare);
//arr=[2,3,4,4,6,23,54];
这样不管自己想按怎么的顺序来排序都可以了。
操作方法
concat方法是将多个数组组成一个数组。
slice方法是从一个数组中选取一些数返回一个新数组。一般会穿两个参数,第一个是开始选取的位置,第二个是选取到这个位置的前一位。如果只有一个参数,默认选取到最后一位。
var arr=["black","white","yellow","green"]
var arr1=arr.slice(1);
alert(arr1);//white,yellow,green
var arr2=arr.slice(1,3);
alert(arr2);//white,yellow
splice方法。一般传入两个及以上的参数。第一个表示开始删除的起始位置。第二个参数表示从这个位置开始删除几个数。第三个及后面的参数表示在此处要加入的数据。
这个方法的用处多多。
位置方法
indexOf和lastIndexOf方法。一个是从数组的开头位置向后查找,一个是从末尾位置向前查找。
迭代方法
归并方法
reduce和reduceRight方法。
顾名思义,就是按照一定的方法归并数组。
reduce是从第一项开始遍历,向前一项进行归并。
而reduceRight恰好相反。
var arr=[1,2,3,4,5];
var sum=arr.reduce(function(prev,cur,index,array){
return prev+cur;
});
alert(sum);//15