昨天记录了栈方法和队列方法。今天把余下的几种方法也记录下来。

(一)重排序方法

reverse()方法可以反转数组的顺序。例如:

var num=[1,4,5,2,7];

num.reverse();

alert(num);//输出7,2,5,4,1

 

sort()方法则是按升序排列数组,即从小到大排列。sort()方法会调用每个数组项的toString(),然后比较得到的字符串(要记住sort()方法比较的是字符串)。

因为比较的是字符串所以会有一点问题发生。例如:

var num=[0,5,1,15,10];

num.sort();

alert(num); //输出0 1 10 15 5

出现这问题的原因是sort()比较的是字符串,因此我们可以让sort()接收一个比较函数作为参数。例如:

function compare(value1,value2){

         if(value1<value2){

              return -1;

        }else if(value1>value2){

             return 1;

       }else{

             return 0;

      }

}

var num=[0,5,1,15,10];

num.sort(compare);

alert(num);// 0,1,5,10,15

要想降序的话调换一下上边compare的返回值。

 

(二)操作方法

concat()方法可以基于当前数组中的所有项创建一个新的数组。具体来说,先创建当前数组的副本,再把接收到的参数放在新数组的末尾并且返回新数组。例如:

var color=["red","black","blue"];

var color2=color.concat("white",["yellow","green"]);

alert(color2);//red black blue white yellow green

 

slice()方法可基于当前数组中的一或多个项创建数组,可接收一或两个参数,即要返回项的起始和结束位置。(这里要记住的是返回项中不包括结束位置的项)

var color=["red","black","blue","white"];

var color2=color.slice(2);

alert(color2); //输出 red black

var color3=color.slice(1,3);

alert(color3); 输出 black blue

如果slice()方法参数是负数的话,就用数组的长度加上该参数。

 

splice()方法可用于向数组的中部插入项。使用这种方法的方式有三种,删除,插入和替换。最后返回被移除的项

当指定两个参数时:要删除第一项的位置和删除的项数。

当指定三个参数时:起始位置 要删除的项数 要插入的项

var color=["red","black","blue","white"];

var remove=color.splice(0,1);

alert(color); //输出black blue white

alert(remove);//输出red

 

remove=color.splice(1,0,"green","yellow");

alert(color);//black green yellow blue white

alert(remove);//返回一个空数组

 

remove=color.splice(1,1,"red","purple");

alert(color);//输出black red purple yellow blue white

alert(remove);//输出green

 

(三)位置方法

indexOf()和lastIndexOf()方法,接受两个参数:查找的项 开始位置  indexOf()从数组开头开始找,lastIdexOf()从数组末尾开始找。

 

(四)迭代方法

JS为数组定义了5个迭代方法 every() filter() forEach() map() some(). 每个方法都接收两个参数:要在每一项运行的函数和(可选的)运行该函数的作用域对象。

首先传入这些方法的函数会接收三个参数:数组项的值  该项在数组中的位置  数组对象本身

every()和some()方法最为相似,every()方法是如果该函数对每一项都返回true,则返回true(请记住,是每一项!!) 而 some()方法是任意一项返回true,则返回true

例如:

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

var everyRuselt=num.every(function(item,index,array){

                return item>2;

});

alert(everyRuselt); //输出false

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

               return item>2;

});

alert(someRuselt);//输出true

 

 

filter()方法会返回函数中true的项组成的数组,例如

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

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

              return item>2

});

alert(filterRuselt);//输出[3,4,5,4,3]

 

 

map()方法会返回每次函数调用的结果组成的数组

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

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

                return item*2;

});

alert(mapRuselt);//输出 [2,4,6,8,10,8,6,4,2]

 

 

最后一种方法是forEach()这个方法没有返回值,它只是对数组中的每一项运行传入函数。与for循环迭代数组本质一样

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

num.forEach(function(item,index,array){

              //执行一些操作

});

 

 

(五)归并方法

reduce()和reduceRight(),这两个方法都会迭代数组的所有项,前者从数组第一项开始遍历,后者从数组最后一项开始遍历。

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

传给这两个方法的函数有四个参数:前一个值  当前值  项的索引  数组对象

例如:

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

var sum=num.reduce(function(prev,cur,index,array){

                       return prev+cur;

});

alert(sum); //输出15

 

posted on 2016-04-08 15:10  blueblue蓝  阅读(176)  评论(0)    收藏  举报