5.2 Arry类型 

转换方法

toString( ) ,valueOf( ), toLocaleString( ), 在默认情况下都会以逗号分隔的字符串形式返回数组项,tolocaleString 在特定情况下会有例外。

join( ),接收一个参数,即用为分隔符的字符串,然后返回包含所有数组项的字符串。

栈方法

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

pop( ),移除数组末尾最后一项,减少数组的 lenght 值,并返回移除的项。

队列方法

shift( ),移除数组中第一个项并返回该项,数组长度减1。

unshift( ),在数组前端添加任意个项并返回新书组的长度。

重新排序方法

reverse( ),反转数组项的顺序。

sort( ),按升序排列数组,即最小值在前面,最大值排在后面, 如果调用该方法时没有使用参数,默认是会调用每个数组项的 toString( ) 转型方法来比较字符串,按字母顺序对数组中的元素进行排序。

若要按照数值的大小排序,需要使用一个排序函数该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:

  • 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
  • 若 a 等于 b,则返回 0。
  • 若 a 大于 b,则返回一个大于 0 的值。

function compare(value1,value2){ 
  
 
  

         if(value1 < value2){  // 
  
 
  

              return -1; 
  
 
  

         }else if(value1 > value2){ 
  
 
  

              return 1; 
  
 
  

         }else{ 
  
 
  

              return 0; 
  
 
  

         } 
  
 
  

    }

这个比较函数可以试用于大多数据类型,只要将其作为参数传递给 short() 即可。

简化:

function compare(value1,value2){ 
  
 
  

         return value1-value2; 
  
 
  

    }

操作方法

concat( ),基于当前数组中的所有项创建一个新的数组。没有传参的情况下只会复制当前数组并返回数组,如果传参了,无论是数组还是字符串这些值都会简单地添加到结果数组的末尾。

var colors=['red','blue','green']

var colors2=colors.concat('yellow',['black','brown']);

alert(colors);   //red,blue,green,yellow,black,brown

slice( ) ,基于当前数组的一或多个项创建一个新的数组。该方法可以接受一或两个参数,即要返回项的起始和结束位置。

var colors=['red','blue','green','pink','purple']

var colors2=colors.clice(1);   //从位置1开始复制

var colors3=colors.clice(1,4); //从位置1开始复制,位置3结束

alert(colors2);   //blue,green,pink,purple

alert(cllors3);   //blue,green,pink  

splice( ),删除:删除任意数量的项,指定2个参数:要删除第一项的位置和要删除的项。

                  插入:指定位置插入任意数量的项,提供3个参数:起始位置、0(要删除的项数),要插入的项。

                  替换:指定位置插入任意数量的项,且同时删除任意数量的项。

var colors=['red','blue','green','pink']

colors.splice(0,1);     //删除第一项

colors.splice(1,0,'yellow','orange')     //从位置1插入两项

colors.splice(1,1,'red','purple')        //插入两项,删除一项

位置方法

indexOf( ),lastIndexOf( ) ,返回要查找的项在数组中的位置,接收两个参数:要查找的项和(可选的)表示查找起点位置的索引。

前者是从数组的开头(位置0)开始向后查找,后者是从数组末尾向前查找。

迭代方法

ECMASscript5 为数组定义了5个迭代方法。

每个方法接收两个参数:要在每一项运行的函数,和(可选的)运行该函数的作用域对象--影响 this 的值。

传入这些方法的函数会接收三个参数,数组项的值、该项在数组的位置、数组对象的本身。

every( ),对数组中的每一项运行给定函数,如果该函数对每一项都返回 true ,则返回 true。

some( ),对数组中的每一项运行给定函数,如果该函数对任一项返回了 true ,则返回 true。

filter( ),对数组中的每一项运行给定函数,返回该函数会返回 true 的项组成的数组。

map( ),对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。

forEach( ),对数组中每一项运行给定函数,这个方法没有返回值。

var number=[1,2,3,4,5,4,3,2,1]; 
  
 
  

    var ever=number.every(function(item,index,array){ 
  
 
  

         return (item>2); 
  
 
  

    }) 
  
 
  

    var some=number.some(function(item,index,array){ 
  
 
  

         return (item>2); 
  
 
  

    }) 
  
 
  

    alert(every);  //false 
  
 
  

    alert(some);   //true

//some() 和 every() 是相似的,判断数组中的值是否大于2再返回结果,区别就和逻辑或和逻辑与一样。

var filter=number.filter(function(item,index,array){ 
  
 
  

         return (item>2); 
  
 
  

    }) 
  
 
  

    alert(filter);   //[3,4,5,4,3] 
  
 
  
 
   
 
  

    var map=number.map(function(item,index,array){ 
  
 
  

         return item*2 
  
 
  

    }) 
  
 
  

    alert(map);   //[2,4,6,8,10,8,6,4,2]

归并方法

reduce( ),reduceRight( ),这两个方法都会迭代数组的所有项,然后构建一个最终的返回值。前者是从数组第一项开始往后遍历,后者是从数组最后一项开始往前遍历。

方法接收两个参数,一个在每一项调用的函数和(可选的)作为归并基础的初始值。

函数接收四个参数:前一个值、当前值、项的索引、数组对象。这个函数返回的任何值都会作为第一个参数自动传给下一项。

var number[1,2,3,4,5];

var raduce=number.reduce(functon(prev,cur,index,array){

     return prev+cur

})

alert(raduce); //15

//第一次执行回调函数,prev是1,cur是2,第二次prev是3(1+2的结果),cur是3(数组第三项),这个过程会持续把数组每一项都访问一遍,然后返回结果。