改变原数组:reverse,sort,push,pop,shift,unshift,splice
不改变原数组:concat,join,splite,slice
ECMAScript数组的每一项可以保存任何类型的数据。
数组的大小是可以动态调整的,即可以随着数据的添加自动增长以容纳新数据。
创建数组基本方式两种:
- Array构造函数 var color = new Array(); var colors = new Array(20); length=20
如果预先知道保存的项目数量,也可以给构造函数传递该数量。也可以向Array构造函数传递数组中应该包含的项。
var colors = new Array(“blue”,“green”,“red”);
在使用Array构造函数时可以省略new操作符 - 使用数组字面量表示法
数组字面量由一对包含数组项的方括号表示,多个数组项之间以逗号隔开。
var colors = [“red”,“blue”,“block”];
var name = [];创建一个空数组
数组的length属性很有特点,它不只读。可以从数组的末尾移除项或向数组中添加新项,新增项不赋值都是undefined。
instanceof操作符的问题在于,它假设只有一个全局执行环境。如果网页中包含多个框架,那实际上就存在两个以上不同的全局执行环境,从而存在两个以上不同版本的Array构造函数。为了解决这个问题,ECMAScript5新增了Array.isArray()方法。这个方法的目的是最终确定某个值到底是不是数组,而不管它是在哪个全局执行环境中创建的。if(Array.isArray(value)){…}
转换方法
所有的对象都具有toLocationString(),toString()和valueof()方法
调用数组的toString()方法会返回数组中每一个值得字符串形式拼接而成的一个以逗号分隔的字符串。
调用valueof()返回的还是数组
alert()要接收字符串参数,所以会在后台调用toString()方法
调用数组的toLocationString()方法时,也会创建一个数组的以逗号为分隔的字符串,为了取得数组的toLocationString()方法,而不是toString()方法。
栈方法
栈是一种后进先出的数据结构。栈中项的插入(推入)和移除(弹出),从发生在栈的顶部,push()和pop()方法
push() 返回修改后数组的长度。插入加到数组的最后
pop() 返回移除的项。删除数组的最后一个元素
队列方法
队列方法,先进先出,队列在列表的末端添加项,从列表的前端移除项。从数组前端取得项
shift() 移除数组中第一项并返回该项。删除
unshift() 在数组前端添加任意个项并返回新数组的长度。插入
重排序方法
reverse()和sort()
sort() 从小到大排序,会调用每个数组项的toString()方法,比较得到的字符串,已确定如何排序
var values = [0,1,5,10,15];
values.sort();
alert(values);//0,1,10,15,5
调用sort()方法会把根据测试字符串的结果改变原来的顺序,不是最佳方案
sort()方法可以接收一个比较函数作为参数,以便我们制定哪个值位于哪个值前面
function compare(value1,value2){
if(value1 < value2){
return -1l
}else if(value1 > value2){
return 1;
}else{
return 0;
}
}
var values = [0,1,5,10,15];
values.sort(compare);
alert(values);//0,1,5,10,15
对于数值类型或其valueof()方法会返回数值类型的对象类型
function compare(value1,value2){
return value2 - value1;
}
操作方法
- concat()方法 先创建当前数组的一个副本,将接收到的参数添加到这个副本的末尾,最后返回新构建的数组。(包含,增加)
- slice()方法 接收一或两个参数,即要返回项的起始和结束为止。(截取) 不影响原始数组
一个参数,返回从指定位置开始到当前数组末尾的所有项
两个参数,返回起始和结束之间的项,但不包括结束位置的项 - splice()方法 向数组的中部插入项
删除:2个参数,删除的第一项的位置和要删除的项数。splice(0,2)删除前两项
插入:3个参数,起始位置,0(要删除的项数),要插入的项。splice(2,0,“green”,“red”);从当前数组的位置2开始插入字符串"green",“red”
替换:指定位置插入的任意数量的项,且同时删除任意数量的项,3个参数:起始位置,要删除的项数和要插入的任意数量的项。插入的项数不必与删除项相等。splice(2,1,“red”,“green”);删除当前数组位置2的项,从位置2插入。splice()返回从原始数组中删除的项(没删除项,返回空数组)
位置方法
indexOf() 从头开始向后查找的项和(可选的)表示查找起点位置的索引。
lastIndexOf() 从末尾向前查找的项和(可选的)表示查找起点位置的索引。
var numbers = [1,2,3,4,5,4,3,2,1];
alert(number.indexOf(4));//3
alert(number.lastIndexOf(4));//5
迭代方法
每个方法都会有运行的函数,这个函数接收三个参数:数组项的值,该项在数组中的位置和数组对象本身。
-
every() 对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true
-
filter() 对数组中的每一项运行给定函数,返回该函数会返回true的项组成的数组
-
foreach() 对数组中的每一项运行给定函,没有返回值
-
map() 对数组中的每一项运行给定函,返回每次函数调用的结果组成的数组
-
some() 对数组中的每一项运行给定函,如果该函数对任一项返回true,则返回true
var numbers = [1,2,3,4,5,4,3,2,1]; var everyResult = numbers.every(function(item,index,array){ return (item > 2); }) alert(everyResult);//false
-
map() 返回一个数组,而这个数组的每一项都是在原始数组中的对应项上运行传入函数的结果。例:给数组每一项乘以2,返回乘积组成的数组
var numbers = [1,2,3,4,5,4,3,2,1]; var everyResult = numbers.map(function(item,index,array){ return (item * 2); }) alert(everyResult);//[2,4,6,8,10,8,6,4] 1,2,3,4,5都不会修改数组中包含值
归并方法
reduce()和reduceRight() 这两个方法都会迭代数组的所有项,然后构建一个最终返回的值。reduce() 从数组的第一项开始,逐个遍历到最后,reduceRight()相反。这两个方法都接收两个参数:一个在每一项上调用的函数和(可选的)作为归并基础的初始值。
4个参数:前一个值,当前值,项的索引和数组对象。这个函数返回的任何值都会作为第一个参数自动传给下一项。
使用reduce()方法可以执行求数组中所有值之和的操作。
var values = [1,2,3,4,5];
var sum = values.reduce(function(pre,cur,index,array){
return pre + cur;
})
alert(sum);//15
第一次执行回调函数,prev是1,cur是2,第二次,prev是3,(1+2=3),cur是3(数组的第三项),这个过程会持续到把数组中的每一项访问一遍,返回结果。