JS中的数组和其他语言不同的是一个数组可以保存多个类型的值,比如数组中第一个位置保存一个字符类型的值,第二个可以保存数值型的值,第三个则可以保存一个对象。
声明方式:
var color = new Array(); var color = new Array(20); var color = new Array("red","blue","green");
另外数组中的length属性不是只读的,可以通过这个属性设置数组的长度。
例如:
var color = new Array("red","blue","green"); color[color.length]="black"; //在位置3添加一种颜色 color[color.length]="brown";//在位置4添加一种颜色
这样依次在最后的位置添加元素,对于跨长度添加也是可以的,例如在100的位置添加一个元素,但这个区间没有赋值的元素都会为undefined
if (Array.isArray(value)) { }
这些方法会将数组内每项元素用逗号分隔开
color.toString(); //red,blue,green color.valueOf();//red,blue,green color.join("|"); //red|blue|green Join方法,表示用哪种符号分隔数组元素
另外,需要注意如果数组中的元素存在undefined或null时,则上面的方法返回的是空字符串。
color.push("white", "org") ;
在数组末尾添加两个元素,push里的数量不固定,可随意,另外这个方法有一个返回值,这个返回值,是数组的length
color.pop();
获取数组的最后一个元素。
color.shift()
获取第一项,并移除第一项
数组中提供了两个默认的排序方法,分别是reverse()和sort()
var values=[0,1,5,10,15]
reverse()方法是反转数组的顺序,按数组的下标倒序显示。values.reverse() //15,10,5,1,0
sort()方法是将内部的值进行tostring后进行排序。values.sort() //0,1,10,15,5
显然上面的排序是有错误的,因为比较的是字符串类型的所以会认为5比1大。
如果想得到正确的结果,可以向这个方法传递一个比较函数作为参数。
比较函数接收两个参数,如果第一个参数应该位于第二个之前,则返回一个负数,如果相等,则返回0,如果第一个位于第二之后,则返回正数,例如:
function compare(value1, value2) { if (value1 < value2) { return -1 } else if (value1 > value2) { return 1; } else { return 0; } }
values.sort(compare);
这样就可以正确排序了。如果逆序的话,则适当修改返回值,就可以。
如果只是数值类型的比较,则代码更为简单。
function compare(value1,value2){ return value1-value2 }
concat方法可以进行数组之间的连接,也可添加新元素
var colors = ["red", "green", "blue"]; var colors2 = colors.concat("yellow", ["black", "brown"]); //red,green,blue,yellow,black,brown
slice方法接收两个参数,起始位置和操作的个数,他可以进行删除、插入、替换,slice始终都会返回一个数组,该数组包含从原始数组中删除的项,如果没有任何项,则返回一个空数组。
var colors = ["red", "green", "blue"]; var removed = colors.splice(0, 1); //删除第一项,并red var removed = colors.splice(1, 0, "yellow", "orange");//从第一个位置插入两项,返回空 var removed = colors.splice(1, 1, "red", "purple"); //删除第二项,插入两项,返回blue
这两个方法都接收两个参数,分别是要查找的项和查找的起点位置。
var numbers = [1, 2, 3, 4, 5, 4, 3, 2, 1]; numbers.indexOf(4); //返回3 numbers.lastIndexOf(4) //返回5 从末尾开始查找
如果这两个方法没有找到搜索项,则返回-1。
var numbers = [1, 2, 3, 4, 5, 4, 3, 2, 1];
every() : 如果该函数的每一项都返回true ,则返回true
var everyResult = numbers.every(function (item, index, array) { return (item > 2); }); //返回false
filter() : 返回函数中满足条件的元素组成的数组。
var filterResult = numbers.filter(function (item, index, array) { return (item > 2); }); // 返回 [3,4,5,4,3]
forEach() : 循环遍历数组,这个方法没有返回值。
numbers.forEach(function (item, index, array) { //执行某些操作。 });
map() : 返回每次调用的结果组成的数组。
var mapResult = numbers.map(function (item, index, array) { return (item * 2); }); //[2,4,6,8,10,8,6,4,2]
some() : 如果函数中,有任意一项返回true ,则返回true 。
var someResult = number.some(function (item, index, array) { return (item > 2); }); //true
归并方法有reduce()和reduceRight()两个方法,reduce是数组的第一项开始遍历到最后,reduceRight是从最后一项开始,遍历到第一项。
这两个函数分别接受4个参数:前一个值,当前值,项的索引和数组对象。
var values=[1,2,3,4,5] var sum = values.reduce(function (prev, cur, index, array) { return prev + cur; }); //返回15