首先来说一下数组的创建方法:
1.空数组:var Array = new Array()
2.指定长度数组:var Array = new Array(Size)
3.指定元素数组:var Array = new Array(Element1, Element2,……,ElementN)
4.单维数组:var Array = [Element1, Element2,……,ElementN]
5.二维数组:var Array = [[ElementSequence1],[ ElementSequence 2],……,[ ElementSequenceN]]
6.多维数组与二维数组同理
再来看看数组的基本操作都有哪些:
1.存取数组元素:
(1)单维数组的存取:数组名[下标索引],
(2)二维数组的存取:二维数组[外层数组下标]内层数组下标多维数组与二维数组相仿把把数组一层层剥开来
2.数组有哪些特性:
(1)数组长度是弹性的,可自由伸缩
(2)数组下标是从0开始的
(3)数组下标可以是数值也可以是非数值:数组下标为非数值时会自动转换为字符串并将字符串作为对象属性的名字生成相应的关联数组(eg:Array[a],Array[b]...)
(4)数组元素可添加到对象中
3.如何增加数组元素:通过使用"[]"运算符来指定一个新下标,例如给变量Array添加第五个元素可写成Array[4]
4.如何删除数组元素:delete 数组名[下标]
5.如何遍历数组元素:for(var 数组元素变量 in 数组)
再来看看数组都有哪些属性吧:
1.length属性:返回数组的长度,即数组中元素的个数;因为数组的索引总是从0开始的,所以一个数组的上下限分别是0和length-1;但是从数组的特性第一条可以知道length属性是可变的,因此也可以通过length属性来增加或减少数组的容量。
2.prototype属性:此属性是object共有的,使我们有能力向对象添加属性和方法,例如:object.prototype.name=value
3.constructor 属性是专门为 function 而设计的,它存在于每一个 function 的prototype 属性中;这个 constructor 保存了指向 function 的一个引用
constructor属性是所有具有prototype对象的成员,它包括除Global和Math对象以外的所有js固有对象,constructor属性保存了对构造特定对象实例的函数的引用。
数组的常用操作方法:
1.栈方法:
(1)pop():从数组末尾移除最后一项,减少数组的length值,然后返回移除的项
(2)push():可以接收任意数量的参数,把它们逐个添加到数组末尾,并返回修改后数组的长度
2.队列方法:
(1)shift():移除数组中第一个项并返回改项,同时将数组长度减1
(2)unshift():在数组前端添加任意个项并返回新数组的长度
3.重排序方法
(1)reserve():反转数组元素顺序
(2)sort():默认情况下,sort()方法会按升序从小到大排列数组项,为了实现排序sort()方法会调用每个数组项的toString()转型方法后然后比较得到的字符串以确定如何排序,哪怕数组中的每一项都是数值sort()方法比较的也是字符串;sort()方法可以接收一个比较函数作为参数,以便我们指定哪个值位于哪个值的前面
4.操作方法:
(1)concat():合并两个数组并返回结果,它不会改变当前数组,而是基于当前数组中的所有项创建一个新数组
(2)slice():截取数组中的一段并返回,可以接收一或两个参数即要返回的起始和结束位置,在只有一个参数的情况下,slice()方法返回从该参数指定位置开始到当前数组末尾的所有项,如果有两个参数,该方法返回起始和结束位置之间的项(包含头不包含尾),如果是负数则用数组长度加上该值确定的位置;slice()方法也是基于当前数组中的一项或多个项创建一个新数组而不改变当前数组
(3)splice():主要用途是向数组的中部插入项,但使用这种方法的方式则有如下3种
a)删除:可以删除任意数量的项,需指定2个参数:要删除的第一项的位置和要删除的项数;列如:splice(0,2)会删除数组中的前两项;
b)插入:可以向指定位置插入任意数量的项,需提供3个参数:起始位置,0(要删除的项数)和要插入的项;如何要插入多项可以再传入第四,第五,以至任意多个项;列如:splice(2,0,"red","green")会从当前数组的位置2开始插入字符串"red"和"green";
c)替换:可以向指定位置插入任意数量的项,且同时删除任意数量的项,只需要提供3个参数:起始位置,要删除的项数和要插入的任意数量的项;列如:splice(2,1,"red","green")会删除当前数组位置2的项,然后再从位置2开始插入字符串"red"和"green";splice()方法始终都会返回一个数组,该数组中包含从原始数组中删除的项(如果没有删除任何项,则会返回一个空数组).
5.转换方法:
所有对象都具有toLocaleString(),toString()和valueOf()方法;
(1)toString():返回由数组中每个值的字符串形式拼接而成的一个以逗号分隔的字符串
(2)toLocalString():用法同toString(),但是数组转化为的是本地字符串
(3)valueOf():用法同toString(),但返回的还是数组
(4)join():接收一个参数用作分隔符,数组转化为字符串后以该参数连接
6.检测数组:
(1)instanceof:检测对象是否为数组,用法为:if(value instanceof Array){//对数组执行某些操作}
(2)Array.isArray():此方法作用同instanceof,但只支持ie9+,firefox 4+,safari 5+,opera 10.5+和chrome,用法为:if(Array.isArray(value)){//对数组执行某些操作}
7.位置方法:
两个位置方法:indexOf()和lastIndexOf(),这两个方法都接收两个参数:要查找的项和(可选的)表示查找起点位置的索引;这两个方法都返回查找的项在数组中的位置或者在没找到的情况下返回-1,在比较第一个参数与数组中每一项时会使用全等操作符,也就是说要求查找的项必须严格相等
(1)indexOf:从数组的开头(位置0)开始向后查找
(2)lastIndexOf:从数组的结束位置开始向前查找
8.迭代方法:
(1)every():相当于逻辑与,如果该函数对每一项都返回true则返回true,它不会对空数组进行检测也不会改变原始数组
(2)filter():返回给定条件的数组,返回值为true的所有数组成员
(3)forEach():无返回值
(4)map():返回每次函数调用的结果数组
(5)some():相当于逻辑或,有任意一项返回true则返回true
9.归并方法:
(1)reduce():接收一个函数作为累加器(accumulator),数组中的每个值(从左到右)开始缩减,最终为一个值;语法为:arr.reduce([callback, initialValue]),
callback:执行数组中每个值的函数,包含四个参数:
a)previousValue:上一次调用回调函数返回的值,或者是提供的初始值(initialValue)
b)currentValue:数组中当前被处理的元素
c)currentIndex:当前被处理元素在数组中的索引, 即currentValue的索引.如果有initialValue初始值, 从0开始.如果没有从1开始.
d)array:调用 reduce 的数组
initialValue:可选参数, 作为第一次调用callback的第一个参数, previousValue 等于 initialValue
(2)reduceRight():和reduce()方法本质一样,区别就在于是从后向前开始遍历