昨天记录了栈方法和队列方法。今天把余下的几种方法也记录下来。
(一)重排序方法
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