欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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