数组的每一项可以保存任何类型的数据,例如第一个位置保存字符串,第二个位置保存数值,第三个位置保存对象……
概念
Array类型创建方式
var colors = new Array();
var colors = ["red", "blue", "green"];
length属性
数组的项数保存在length中,始终会返回0或更大的值,可用于从数组末尾移除项或添加新项。
var colors = ["red", "blue", "green"];
colors.length = 2; //删除第三项
alert(colors[2]); //undefined
colors[colors.length] = "green"; //添加第三项
alert(colors[2]); //"green"
转换方法(toString, valuesOf)
var colors = ["red", "blue", "green"];
alert(colors.toString()); //red,blue,green
alert(colors.valuesOf()); //red,blue,green
alert(colors); //red,blue,green
栈方法(push, pop)
push()方法可以将参数逐个添加到数组末尾,返回修改后的长度;
pop()方法可以从数组末尾移除最后一项,并返回该项;
var colors = new Array();
var count = colors.push("red","green"); //2
var items = colors.pop(); //"green"
队列方法(unshift, shift)
unshift()方法可以将参数逐个添加到数组开头,返回修改后的长度;
shift()方法可以从数组开头移除第一项,并返回该项;
var colors = new Array();
var count = colors.unshift("red","green"); //2
var items = colors.shift(); //"red"
重排序方法(reverse, sort)
reverse()方法会反转数组的顺序;
sort()方法会升序排列数据项,默认当做字符串按照ASCII排列而不是数值;
想让sort()方法按照数值顺序升、降序排列,需要自写比较函数:
var values = [0, 15, 123, 20, -1];
values.sort(); //[-1, 0, 123, 15, 20]
values.sort(function(a, b){return a - b;}); //[-1, 0, 15, 20, 123]
values.sort(function(a, b){return b - a;}); //[123, 20, 15, 0, -1]
操作方法(concat, slice, splice)
concat()方法可以基于当前数组中的所有项创建一个新数组;
var colors = ["red", "green", "blue"];
var colors2 = colors.concat("yellow", ["black", "brown"]); //["red", "green", "blue", "yellow", "black", "brown"]
slice()方法可以基于当前数组中的一个或多个项创建一个新数组,可接受一至两个参数,即要返回的起始和结束位置,新数组包括起始位置但不包括结束位置;
var colors = ["red", "green", "blue"];
var colors2 = colors.slice(1); //["green", "blue"]
var colors3 = colors.slice(0, 2); //["red", "green"]
splice()方法主要用途是向数组的中部插入项,可以实现删除、插入、替换三种操作,返回删除项。三个参数分别为:起始位置、删除长度、替换项(可选);
var colors = ["red", "green", "blue"];
var removed = colors.splice(0, 1); //删除第一项 ["green", "blue"]
removed = colors.splice(1, 0, "yellow", "orange"); //从位置1开始插入两项 ["green", "red", "yellow", "orange", "blue"]
removed = colors.splice(1, 1, "white", "purple"); //插入两项删除一项 ["green", "white", "purple", "yellow", "orange", "blue"]
位置方法(indexOf, lastIndexOf)
两个方法都接收两个参数:要查找的项和表示查找起点位置的索引(可选),其中indexOf()方法从数组的开头向后查找,lastIndexOf()方法从数组的末尾向前查找。
两者都返回查找项在数组中的位置,或者在没找到的情况下返回-1。
var numbers = [1, 2, 3, 4, 5, 4, 3, 2, 1];
numbers.indexOf(4); //3
numbers.lastIndexOf(4); //5
numbers.indexOf(4, 4); //5
numbers.lastIndexOf(4, 4); //3
迭代方法(every, filter, forEach, map, some)
该类方法都接收三个参数:数组项的值、该项在数组中的位置、数组对象本身。
作用都是对数组中的每一项运行给定函数,返回值相互不同:
every()方法:如果该函数对每一项都返回true,则返回true;
some()方法:如果该函数对任意一项返回true,则返回true;
filter()方法:返回该函数会返回true的项组成的数组;
forEach()方法:没有返回值;
map()方法:返回每次函数调用的结果组成的数组;
var numbers = [1, 2, 3, 4, 5, 4, 3, 2, 1];
numbers.forEach(function(item, index, array) {
//执行操作
});
归并方法(reduce, reduceRight)
两个方法都会迭代数组的所有项,然后构建一个最终返回的值,前者从前往后遍历,后者从后往前。
两个方法都接收两个参数:一个在每一项上调用的函数和作为归并基础的初始值(可选)。
调用的函数接收四个参数:前一个值、当前值、项的索引、数组对象。
可用于数组求和操作:
var values = [1, 2, 3, 4, 5];
var sum = values.reduce(function(prev, cur, index, array) {
return prev+cur;
}); //15