创建数组的两种方式:
1.使用Array构造函数 var colors = new Array()
, new
操作符可省略
给构造函数传递一个值的话,若为数值,则该值为新数组的长度;若为其他类型,则该值为新数组的第一个元素,且数组长度为1。1
2var colors = new Array(3); //创建一个包含3项的数组,值都为undefined
var colors = new Array("liyang"); //创建一个包含1项,即字符串'liyang'的数组
根据此特性创建一个重复某字符串n次的方法:1
2
3
4
5function repeatString(str,n){
return new Array(n+1).join(str); //创建一个长度为n+1的空数组,使用str来连接这个空数组的元素,即undefined
}
repeatString("a",4); // 返回 "aaaa"
repeatString("3",3); //返回 "333"
2.使用数组字面量表示法
1 | var colors = ['red','yellow','green']; |
直接给Array
的length赋一个新的值会导致Array
大小的变化;Array
可以通过索引把对应的元素修改为新的值;
如果通过索引赋值时,索引超过了范围,同样会引起Array
大小的变化
检测数组
- value instanceof Array 执行环境会对其判断有影响
- ECMAScript5新增的方法
Array.isArray()
来确定某个值到底是不是数组
转换方法
所有对象都有 toLocaleString()、toString()和valueOf()方法,数组的调用如下:
toString()
:返回由数组中每个值的字符串形式拼接而成的一个以逗号分隔的字符串
;toLocaleString()
:同样返回一个逗号分隔的字符串,不同在于会调用数组每一项的toLocaleString()方法,而不是toString()方法;valueOf()
: 返回数组;
shift,unshift和push,pop
shift()
方法删除Array
的第一个元素,返回的是删掉的元素unshift()
方法向Array
的头部添加若干值,返回的是新数组的长度push()
方法向Array
的尾部添加若干值,返回的是新数组的长度pop()
方法删除Array
的最后一个元素,返回的是删掉的元素
1 | var arr = [1,2,3,4]; |
reverse和sort
reverse()
方法用于反转数组项的顺序sort()
方法用于排序数组,默认按照升序排序sort()
方法会调用每个数组项的toString()
方法,然后比较字符串进行排序,可以接受一个比较函数作为参数。
1 | var arr = [13,15,5,2,6]; |
slice和splice
slice()
方法截取数组的部分元素,根据索引来截取。对应字符串的substring()
方法splice()
方法可以从指定的索引处开始删除n个元素,然后再从该位置添加m个元素,是数组的万能方法
1 | var arr = ['red','yellow','green','blue']; |
concat和join
concat()
方法把当前的Array和另一个Array连接起来,返回一个新的数组join()
方法把当前Array的每个元素都用指定的字符串连接起来,然后返回连接后的字符串
1 | var arr = ['a','b','c']; |
indexOf和lastIndexOf
两者都接收两个参数:要查找的项和表示查找地点的索引(可选);indexOf()从数组开头开始向后查找,lastIndexOf()从数组的末尾向前查找。若查找的项没找到则返回-11
2
3
4
5
6
7
8
9var arr = [1,2,3,2,1];
arr.indexOf(2); //1
arr.indexOf(99); //-1
arr.indexOf(1,1); //4
arr.indexOf(1,-3); //4
arr.indexOf(2,-1); //-1
arr.lastIndexOf(2); //3
arr.lastIndexOf(2,-2) //3
arr.lastIndexOf(2,-3) //1
数组的迭代方法
ECMAScript5定义了5个数组的迭代方法,每个方法都接收2个参数:要在每一项上运行的函数和运行该函数的作用域对象-影响this的值(可选)。 函数会接收3个参数:数组项的值item,item项的索引index和该数组对象本身。
every()和some()
every()
:数组中每一项运行函数,都返回true,才返回true。some()
:数组中每一项运行函数,有一项返回true,就返回true。
filter()
数组中每一项运行函数,返回 函数运行为true的项 组成的数组。
map()
数组中每一项运行函数,返回 每次调用函数返回的值 组成的数组,跟原数组一一对应。
forEach()
对数组中每一项运行函数,没有返回值
数组的归并方法
reduce()和reduceRight()
ECMAScript5定义了2个数组的归并方法,每个方法都接收2个参数:在每一项调用的值和作为归并的初始值(可选)。 函数会接收4个参数:前一个值,当前值,项的索引和数组对象本身。这个函数的返回值会作为第一个参数自动传个下一项。 第一次迭代发生在数组第二项上,因此第一个参数是数组第一项,第二个参数是数组第二项。1
2
3
4
5var values = [1,2,3,4,5];
var sum = values.reduce(function(prev,cur,index,array){
return prev + cur;
});
sum; // 15
第一次执行回调函数,prev是1,cur是2。第二次执行,prev是返回值3,cur是第三项3。过程直至数组最后一项。1
2
3
4
5var values = [1,2,3,4,5];
var sum = values.reduce(function(prev,cur,index,array){
return prev + cur;
},6);
sum; // 21
若传入第二个参数作为初始值(可为任意值),则第一次prev是6,cur是数组第一项1。
reduceRight()是反过来从最后开始执行。