js数组方法

来源:互联网 发布:秒杀java实现代码 编辑:程序博客网 时间:2024/06/16 18:38

除了object外,Array类型大概是ECMAScript中最常用的类型了。ECMAScript数组的每一项可以保存任何类型的数据。而且ECMAScript数组的大小是可以动态调整的,即可以随着数据的添加自动增长以容纳新数据。创建数组的基本方式有两种

//第一种是使用array构造函数var colors=new Array();var colors=new Array(20)//创建length为20的数组var colors=new Array('red','blue','green');//创建了包含三个字符串值的函数var colors=Array(3)//也可以省略new操作符//第二种是使用数组字面量表示法var colors=['red','blue','green'];//创建一个包含三个字符串的数组var colors=[];//创建一个空数组
js数组有很多方法

1.转换方法:

toLocaleString(),toString(),valueOf(),join()

var colors=['red','blue','green'];alert(colors.toString());//red,blue,green。返回字符串,实际上数组的toString()方法会调用数组每一项的toString()方法console.log(colors.valueOf());//['red','blue','green']。返回的还是数//toLocaleString()方法经常会返回与toString(),valueOf()相同的值。但也不总是如此。当调用数组的toLocaleString()方法时,它也会创建一个数组值的逗号分隔的字符串。但是为了取得每一项的值,调用的是每一项的toLocaleString()var person1={toLocaleString:function(){return 'Nikolaos';},toString:function(){return 'Nicholas';}};var person2={toLocaleString:function(){return 'Grigorios';},toString:function(){return 'Greg';}};var people=[person1,person2];alert(people);//Nicholas,Gregalert(people.toString());//Nicholas,Gregalert(people.toLocaleString());//Nikolaos,Grigorios//join()方法只接受一个参数,即用作分隔符的字符串,然后返回包含所有数组项的字符串alert(colors.join('||'));//red||blue||green
如果数组中的某一项的值是null或undefined,那么该值在join(),toLocaleString(),toString(),valueOf()方法返回的结果中以空字符串表示

2.栈方法:

栈是一种后进先出的数据结构,也就是最新添加的项最早被移除。而栈中项的插入和移除只发生在一个位置——栈的顶部。

push():可以接收任意数量的参数,把它们逐个添加到数组末尾,并返回修改后数组的长度

pop():从数组末尾移除最后一项,减少数组的length值,然后返回移除的项

push()和pop()都是会影响原数组的方法

var colors=new Array();var count=colors.push('red','blue');alert(count);//2count=colors.push('black');alert(count);//3var item=colors.pop();alert(item);//'black'alert(colors.length);//2

3.队列方法:

队列是一种先进先出的数据结构,即在队列末端添加项,在前端移除项

shift():能够移除数组中的第一个项,并返回该项,同时将数组长度减一。结合使用shift()和push()方法,可以像使用队列一样使用数组

var colors=new Array();//创建一个数组var count=colors.push('red','blue');//推入两项alert(count);//2count=colors.push('black');//推入另一项alert(count);//3var item=colors.shift();//取得第一项alert(item);//'red'alert(count);//2
unshift():与shift()的用途相反,它能在数组前端添加任意个项并返回新数组的长度。结合使用unshift()和pop()方法,可以从相反的方向来模拟队列,即从数组前端添加项,末端移除项
var colors=new Array();var count=colors.unshift('red','blue');//整体推入两项,是['red','blue'],而不是['blue','red']alert(count);//2count=colors.unshift('black');alert(count);//3var item=colors.pop();alert(item);//'blue'alert(colors.length);//2

4.重排序方法:

reverse():会反转数组项的顺序
var values=[1,2,3,4,5];values.reverse();alert(values);//5,4,3,2,1
sort():默认地,按升序排列数组项,sort()方法会调用每个数组项的toString()方法,然后比较得到的字符串,即,sort()方法比较的始终是字符串。
//因为在进行字符串比较时,10位于5的前面var values=[0,1,5,10,15];values.sort();alert(values);//0,1,10,15,5
sort()方法可以接受一个比较函数作为参数。比较函数接收两个参数,如果第一个参数应该位于第二个之前则返回一个负数,反之,则返回一个正数。
function compare(value1,value2){return value1-value2}var values=[0,1,10,15,5];values.sort(compare);alert(values);//0,1,5,10,15

5.操作方法:

concat():先创建当前数组的一个副本,然后将接收到的参数添加到这个副本的末尾,最后返回新构建的数组。在没有给concat()方法传递参数的情况下,它只是复制当前数组并返回副本(不会影响原数组)
var colors=['red','green','blue'];var colors2=colors.concat('yellow',['black','brown']);alert(colors);//red,green,bluealert(colors2);//red,green,blue,yellow,black,brown
slice():基于当前数组中的一个或多个项创建一个新数组。此方法可接受一或两个参数,即要返回项的起始和结束位置。在只有一个参数的情况下,slice()方法返回从该参数指定位置开始到当前数组末尾的所有项。如果有两个参数,该方法返回起始和结束位置之间的项,但不包括结束位置的项(如果slice()中的参数中有负数,则用数组长度加上该数来确定相应的位置)(不会影响原数组)
var color=['red','green','blue','yellow','purple'];var colors2=colors.slice(1);var colors3=colors.slice(1,4);alert(colors2);//green,blue,yellow,purplealert(colors3);//green,blue,yellow
splice():删除,插入,替换。(会影响原数组,但返回删除项)
var colors=['red','green','blue'];//删除:指定两个参数,要删除的第一项的位置和要删除的项数var removed=colors.splice(0,1);alert(colosr);//green,bluealert(removed);//red//插入:提供三个参数,起始位置,0(要删除的项数),要插入的项,如果要插入多个项,可以继续添加参数removed=colors.splice(1,0,'yellow','orange');alert(colors);//green,yellow,orange,bluealert(removed);//空数组//替换:指定三个参数,起始位置,删除的项数,要插入的任意数量的项removed=colors.splice(1,1,'red','purple');alert(colors);//green,red,purple,yellow,orange,bluealert(removed);//yellow

6.位置方法:

indexOf()和lastIndesOf()这两个方法都接收两个参数,要查找的项和(可选的)表示查找起点位置的索引,indexOf()从数组开头开始查找,lastIndexOf()从数组末尾开始查找。这两个方法都返回要查找的项在数组中的位置,或者在没找到的情况下返回-1(在比较第一个参数与数组中的每一项时,会使用全等操作符;也就是说,要求查找的项必须严格相等)

7.迭代方法:

有五个迭代方法,每个方法都接收两个参数:要在每一项上运行的函数和(可选的)运行该函数的作用域对象——影响this的值。传入这些方法中的函数会接收三个参数,数组项的值,该项在数组中的位置和数组对象本身(这五个方法都不会修改数组中的包含的值)
everty():对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true
filter():对数组中的每一项运行给定函数,返回该函数会返回true的项组成的数组
forEach():对数组中的每一项运行给定函数,这个方法没有返回值
map():对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组
some():对数组中的每一项运行给定函数,如果该函数对任一项返回true,则返回true
var arr=['blue','red','yellow','black'];var color1='brown';var obj={color1:'blue'}arr.forEach(function(item,index,array){if(item==this.color1){return alert('true '+index+' '+array);}},obj);//true 0 blue,red,yellow,black

8.归并方法:

reduce()和reduceRight():这两个方法都会迭代数组的所有项,然后构建一个最终返回值