javaScript基础之——数组 javascript数组方法
程序员文章站
2022-06-09 12:40:15
...
数组是复合数据类型(对象类型)的数据,它的数据索引为数字,从0开始,逐一递增,有个length属性,代表数组项的总数。数组的每一项可以存任何类型的数据,并不是数组就只可以存Number类型的数据哦。
当我们用for in 语句 遍历数组的时候,length属性并不会被遍历出来。
创建数组的方法
var arr = new Array( ); //创建一个空数组
var arr = new Array(size); // size-数组的长度,ex.size=3,创建一个有3个元素的数组,元素为undefined
var arr = new Array(element0, element1, ..., elementn); // 用参数指定的值初始化数组,以逗号分隔
var arr = []; //直接量的方式创建一个空数组,和第一个创建数组的方法同效
var arr = [element0, element1, ..., elementn]; // 直接量的方式创建数组,同上面第三个创建方式
数组的内置方法
数组首尾位置的数据项添加及删除方法
array.push()
array.pop()
array.unshift()
array.shift()
//添加的都返回数组的length属性值
//删除的都返回删除项的值
array.push( value,… ) --- 向数组的尾部添加值
参数:value可以是一个或多个(不传参数好像也没报错)
功能:方法push()将把它的参数顺次添加到array的尾部。
返回值:把指定的值添加到数组后的新长度。
是否修改原数组:是!---它直接修改array,而不是创建一个新的数组。
扩展:方法push()和方法pop()用数组提供先进后出栈的功能。
Bug:在JavaScript的Netscape实现中,如果把语言版本明确地设置为1.2,该函数将返回最后添加的值,而不是返回新数组的长度。
array.unshift( value,… ) --- 在数组头部插入一个元素
参数:value是要插入到数组头部的一个或多个值(不传参数好像也没报错)
功能:方法unshift()将把它的参数插入array的头部,并将已经存在的元素顺次地移到较高的下标处,以便留出空间。该方法的第一个参数将成为数组新的元素0,如果还有第二个参数,它将成为新的元素1,以此类推。
返回值:把指定的值添加到数组后的新长度。
是否修改原数组:是!---unshift()直接修改原有的数组,而不是创建一个新的数组。
示例:
var a = []; // a:[]
a.unshift(1); // a:[1] 返回 1
a.unshift(22); // a:[22,1] 返回 2
a.unshift(33,[4,5]); // a:[33,[4,5],22,1] 返回 4
a.push(6); // a:[33,[4,5],22,1,6] 返回 5
array.pop( ) --- 删除并返回数组的最后一个元素
参数:无
功能:方法pop()将删除array的最后一个元素,把数组长度减1,如果数组已经为空,则pop()不改变数组。
返回值:返回它删除的元素的值。数组已经为空的时候,pop()方法返回undefined。
是否修改原数组:是!---它直接修改array。
扩展:方法push()和方法pop()用数组提供先进后出栈的功能。
示例:
var stack = []; // 栈:[]
stack.push(1, 2); // 栈: [1,2] 返回 2
stack.pop(); // 栈: [1] 返回 2
stack.push([4,5]); // 栈: [1,[4,5]] 返回 2
stack.pop() // 栈: [1] 返回 [4,5]
stack.pop(); // 栈: [] 返回 1
array.shift( ) --- 将元素移出数组
参数:无
功能:方法shift()将把array的第—个元素移出数组,返回那个元素的值,并且将余下的所有元素前移一位,以填补数组头部的空缺。如果数组是空的,shift()将不进行任何操作,返回undefined。
返回值:返回数组原来的第一个元素,也就是被删除的元素的值。数组已经为空的时候,shift()方法返回undefined。
是否修改原数组:是!---它直接修改array。
扩展:该方法常常和unshift()一起使用。
示例:
var a = [1, [2,3], 4];
a.shift( ); // 返回 1; a = [[2,3], 4]
a.shift( ); // 返回 [2,3]; a = [4]
重排序方法
array.reverse()
array.sort()
//重排序方法修改原数组,并不创建新数组,
//删除的都返回删除项的值
array.reverse() --- 颠倒数组中元素的顺序
功能:将颠倒数组中元素的顺序。
返回值:原数组(已经颠倒元素顺序了)
是否修改原数组:是!---它直接修改array,而不是创建一个新的数组。
array.sort( fn ) ---对数组元素进行排序
参数:可选参数-fn,用来指定按什么顺序进行排序的函数
功能:将在原数组上对数组元素进行排序。
参数描述:如果没有参数,将按字母顺序(字符编码顺序)对数组中的元素进行排序,实现排序的时候,首先会把数组的元素都转换成字符串,再进行排序。 如果想按照别的顺序进行排序,必须提供比较函数(传参)ex:参数---function fn (a,b){ return a-b; } //a,b是数组中相邻的2项数组项,当a>b的时候,返回>0的数,那么交换a,b的位置,如果a<0的数,不交换位置,如果a=b,返回0,也不交换位置。
返回值:对原数组的引用,注意:数组在原数组上进行排序,不制作副本。
是否修改原数组:是!---它直接修改array。
数组的固定位置的增删改方法
array.splice(start,deleteCount,value,…) --- 插入、删除或替换数组的元素
参数:start:开始插入或删除的数组元素的下标,deleteCount:可选参数,从start位置开始,包括start在内,要删除的元素个数,如果没有指定它,将从start开始删除到原数组的结尾的所有元素,value:要插入数组的零个或者多个值,从start所指的下标处开始插入
功能:方法splice()将删除从start开始(包括start所指的元素在内)的零个或多个元素,并且用参数列表中声明的一个或多个值来替换那些被删除的元素。位于插入或删除的元素之后的数组元素都会被移动,以保持它们与数组其他元素的连续性。
返回值:如果从array中删除了元素,返回的是含有被删除元素的数组。如果没有删除元素,返回空数组。
是否修改原数组:是!---它直接修改array,而不是创建一个新的数组。
Bug:在JavaScript 1.2解释器中,如果删除的是单个元素,那么返回的是元素,而不是包含那个元素的数组。
--------------------以上7个方法,都直接对原数组进行操作,原数组会被修改------------------
可以复制数组的方法
array.slice()
array.concat()
//都先复制原数组,再对复制数组进行操作,返回操作后的新数组
array.slice(start,end) --- 返回数组的一部分
参数:start:开始处的数组元素的下标,end:可选参数,数组片段结束处的后一个元素的下标,如果没有指定这个参数,包含从start到数组结束的所有元素,如果是负数,从数组尾部开始算起的元素。
功能:slice方法将返回数组的一部分,或者是一个子数组。返回的数组包含从start到end之间的所有元素,但不包含end所指的元素。如果没有指定end,返回从start到原数组结尾的所有元素。
返回值:一个新数组,包含从start到end(不包括该元素)指定的array元素。
是否修改原数组:否!
array.concat(value,…) --- 连接数组
参数:要增加到array中的值,可以是任意多个。
功能:将创建并返回一个新数组,这个数组是将所有参数都添加到array中生成的。如果要进行conca()操作的参数是一个数组,那么添加的是数组中的元素,而不是数组。
返回值:一个新数组,包含array中的所有数组项和concat的参数数组项。
是否修改原数组:否!
示例:
var a = [1,2,3];
a.concat(4, 5) //返回 [1,2,3,4,5]
a.concat([4,5]); //返回 [1,2,3,4,5]
a.concat([4,5],[6,7]) //返回 [1,2,3,4,5,6,7]
a.concat(4, [5,[6,7]]) //返回 [1,2,3,4,5,[6,7]]
将数组转化为字符串的方法
array.join()
array.toString()
array.toLocaleString()
//有些情况会隐式调用toString()方法
array.join(separator) ---将数组元素连接起来以构建一个字符串
参数:在返回的字符串中用于分隔数组元素的字符或字符串,它是可选的。如果省略了这个参数,用逗号作为分隔符。
功能:将每个数组元素转换成一个字符串,然后把这些字符串连接起来,在两个元素之间插入指定的separator字符串。
返回值:一个字符串,通过把array的每个元素转换成字符串,然后把这些字符串连接起来,在两个元素之间插入连接符而生成。
是否修改原数组:否!
扩展:可以用String对象的split()方法执行相反的操作,即把一个字符串分割成数组元素。
array.toString() ---将数组转换成一个字符串
参数:无
功能:将把数组转换成一个字符串,并且返回这个字符串。当数组用于字符串环境中时,JavaScript会调用这一方法将数组自动转换成一个字符串。但某些情况下,需要明确的调用这个方法。
toString()在把数组转换成字符串时,首先要将数组的每个元素都转换成字符串(通过调用这些元素的toString()方法)。当每个元素都被转换成字符串时,它就以列表的形式输出这些字符串,字符串之间用逗号分隔。返回值与没有参数的join()方法返回的字符串相同。
返回值:用逗号连接的一个字符串。
是否修改原数组:否!
扩展:JavaScript1.2版本中,toString()将会返回用逗号和空格分隔的数组元素列表,这个列表采用数组直接量表示法,用方括号括起元素。
array.toLocaleString() ---把数组转换成局部字符串
参数:无
功能:将返回数组的局部字符串表示。它首先调用每个数组元素的toLocaleString()方法,然后用地区特定的分隔符把生成的字符串连接起来,形成一个字符串。
返回值:array的局部字符串表示。
是否修改原数组:否!
数组的属性:length
array.length:可读写属性,可以通过修改array.length的值修改数组的长度
--------------------以上全部方法,都是JavaScript数组的常用的、基础的方法------------------
ECMAScript 5 添加的数组方法
位置方法
//详情请参考《JavaScript高级程序设计第三版》95页
array.indexOf()
array.lastIndexOf()
array.indexOf(target,start) ---正向查找数组项
参数:target:要查找的项,start:可选参数,查找起点位置的索引
功能:查找target在数组中的位置,在比较相等的时候会使用权等操作符(===)。
返回值:返回要查找的项在数组中的位置,没找到的情况下返回-1。
是否修改原数组:否!
浏览器支持:IE9+,Firefox2+,Safari3+,opera9.5+,chrome
array.lastIndexOf(target,start) ---与indexOf()方法相同,不同之处在于从数组的末尾往前查找
迭代方法 --- 不修改原数组
//详情请参考《JavaScript高级程序设计第三版》96页
array.every() : 对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true。
array.filter() : 对数组中的每一项运行给定函数,返回该函数会返回true的项组成的数组。
array.forEach() : 对数组中的每一项运行给定函数,这个方法没有返回值。
array.map(): 对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。
array.some(): 对数组中的每一项运行给定函数,如果该函数对任一项返回true,则返回true。
浏览器支持:IE9+,Firefox2+,Safari3+,opera9.5+,chrome
归并方法 --- 迭代数组所有项,然后构建一个最终返回的值
//详情请参考《JavaScript高级程序设计第三版》97页
array.reduce() :
array.reduceRight() :
浏览器支持:IE9+,Firefox3+,Safari4+,opera10.5+,chrome