数组操作
一、数组的创建
构造函数
1、var a=new Array();
无参构造函数,创建一个空数组。
2、var a=new Array(5);
一个数字参数构造函数,指定数组的长度(由于数组长度可以动态调整,作用不大),创建指定长度的数组。
3、var a=new Array(5,"hello");
带有初始化数据的构造函数,创建数组并初始化参数数据。
字面量
1、var a=[];
使用方括号,创建空数组。
2、var a=[1,2,"hello"];
使用方括号,并传入初始化数据。
注意点:
在使用构造函数创建数组时如果传入一个数字参数,则会创建一个长度为参数的数组,如果传入多个,则会创建一个数组,参数作为初始化数据加到数组中。
var a=new Array(5); console.log(a.length); //5 数组是空的 var b=new Array(5,6); console.log(b.length); //2
使用字面量,则无论传入几个参数,都会把他当做初始化内容。
var a=[5]; console.log(a.length); //1
二、操作
1、length
计算数组的长度
var a=["aaa","bbb"]; alert(a.length) //2
2、索引
通过索引获取相应值,同时也可以改变索引对应的值。
var a=["aaa","bbb","ccc"]; alert(a[1]); //bbb a[1]="ddd"; alert(a[1]); //ddd
3、indexOf
返回指定元素的位置,若不存在则返回-1。
var a=["aaa","bbb","ccc"]; alert(a.indexOf("ccc")); //2 alert(a.indexOf("ddd")); //-1
4、slice
接收一个或两个参数,参数对应的是要返回项的起始位置和结束位置,若只有一个参数,该方法返回数组的指定位置到末尾期间的所有项,如果有两个参数,返回从起始位置到结束位置期间的所有项,但是不包括结束位置那一个项,返回的是一个新的数组,不影响原数组。
var a=["aaa","bbb","ccc"]; var b=a.slice(1); console.log(b); ["bbb","ccc"]; var c=a.slice(0,2); console.log(c); ["aaa","bbb"];
5、push
向数组末尾添加若干项,返回的是添加完成后数组的长度(length);
var a=["aaa"]; var b=a.push("bbb","ccc"); console.log(a); //["aaa","bbb","ccc"]; console.log(b); //3
6、unshift
向数组头部添加若干项,返回的是添加完成后数组的长度。
var a=["aaa","bbb"]; var b=a.unshift("ccc"); console.log(a); //["ccc","aaa","bbb"] console.log(b); //3
7、pop
删除数组最后一个元素,返回被删除的元素。
var a=["aaa","bbb","ccc"]; console.log(a.pop()); // ccc console.log(a); //["aaa","bbb"]
8、shift
删除数组第一个元素,返回的是被删除的元素。
var a=["aaa","bbb","ccc"]; var b=a.shift(); console.log(a); //["bbb","ccc"] console.log(b); // aaa
9、sort
对数组进行排序,返回排序后的数组,默认把所有元素转化为字符之后再进行排序,排序以后会改变原数组。
可以定义一个比较函数,来进行数字的排序。
function bijiao(a,b){ return a-b; } var arr=[3,5,1,10,8]; console.log(arr.sort(bijiao)); //[1, 3, 5, 8, 10]
10、reverse
对数组进行反转。
var a=["aaa","bbb","ccc"]; a.reverse(); console.log(a); //["ccc", "bbb", "aaa"]
11、splice
从指定位置删除若干个元素,再从该位置添加若干元素,结果返回被删除的元素,第一个参数表示起始删除的位置,第二个参数表示要删除的个数,之后的元素表示要添加的元素。
这里参数有三种情况。
var a=["aaa","bbb","ccc"]; console.log(a.splice(1)); // ["aaa"] 只有一个参数,从该位置删除到结束 var a=["aaa","bbb","ccc"]; console.log(a.splice(0,1)); //["bbb","ccc"] 有两个参数,从该位置删除到指定位置 var a=["aaa","bbb","ccc"]; console.log(a.splice(0,2,"ddd")); //["ddd","ccc"] 有多个参数,第一为删除开始位置,第二为结束位置,后面就是要添加的新元素。
12、concat
把当前的数组和另外一个数组链接起来,并返回新的数组,并不影响原来的两个数组。
var a=["aaa"]; var b=["bbb"]; var c=a.concat(b); console.log(a); //["aaa"] console.log(b); //["bbb"] console.log(c); //["aaa","bbb"]
13、join
将数组中的元素用指定的字符连接起来,返回字符串。
var a=["aaa","bbb","ccc"]; var b=a.join("--"); console.log(a); //["aaa","bbb","ccc"] console.log(b); // aaa--bbb--ccc
14、map
对数组中的每一项运行函数,返回函数运行结果组成的数组,函数的参数是一个函数,而该函数接收三个参数:数组当前值,数组索引、数组
var arr = [1,2,3,-1]; alert(arr.map(function(x) { return x * x; } ));//返回1,4,9,1
15、reduce
从数组的第一项开始,逐个遍历到最后,函数接受两个参数,一个是在数组上调用的函数和归并的初始值(可选),而调用数组的函数接受四个参数:前一个值、当前值、当前值索引、当前数组,第一次调用时,前一个值是数组第一项,当前值是数组第二项
var arr = [1,2,3,-1]; var result = arr.reduce(function(prev,cur,index,array){ return prev+cur }) alert(result);//5
16、filter
对数组中的每一项进行函数,返回该函数返回true的元素组成的新数组。
var a=[1,0,-8,9,5,-2]; var b=a.filter(function(x){ if(x<0){ return true; }else{ return false; } }) console.log(b); //[-8,-2]