javaScript中Array类型的方法(二)

ECMAScript为数组中的数组中的项提供了很多的方法,以下介绍操作方法、位置方法、迭代方法、归并方法

4.操作方法

①concat()方法

concat()方法可以基于当前数组中的所有项创建一个新数组
案例:

1
2
3
4
var colors = ["red","green","blue"];
var colors2 = colors.concat("yellow",["black","brown"]);
alert(colors); //red,green,bule
alert(colors2); //red,green,blue,yellow,brown

②slice()方法

基于当前数组中的一个或者多个项创建一个新数组。slice()方法可以接受一或两个参数,即要返回项的起始和结束为位置;
一个参数的情况:slice()方法返回从该参数指定位置开始到当前数组末尾的所有项。
两个参数的情况:slice()返回起始和结束位置之间的项-但不包括结束位置的项。
参数其实就是数组中项对应的下标,如果传入的是负数那么则可以按照加上数组的长度的方式继续转化,也可以理解为从数组的末尾进行倒数定位;
案例:

1
2
3
4
5
6
var colors = ["red","green","blue","yellow","purple"];
var colors2 = colors.slice(1);
var colors3 = colors.slice(1,4);

alert(colors2); //green,blue,yellow,purple
alert(colors3); //green,bule,yellow

③splice()方法

splice()方法恐怕算师最强大的数组方法了,具有多种用法。splice()的主要用途是向数组的中部插入项,但使用这种方法的方式则有如下3中。
删除:可以删除任意数量的项,只需指定2个参数:要删除的第一项的位置和要删除的项数。
插入:可以向指定位置插入任意数量的项,提供参数3个或者3个以上,三个参数:起始位置、0(要删除的项)、要插入的项;插入的项的个数不必与删除的项的个数相同。
替换:可以向指定位置插入任意数量的项,同时删除任意数量的项目,只需自定三个参数:起始位置、要删除的项数和要插入的任意数量的项。
splice()方法始终都会返回一个数组,该数组中包含从原始数组中删除的项(如果没有删除任何项,则返回一个空数组)。
案例:

1
2
3
4
5
6
7
8
9
10
11
12
var colors = ["red","green","blue"];
var removed = colors.splice(0,1); //删除第一项
alert(colors); //green,blue
alert(removed); //red,返回的数组中只包含删除的一项

removed = colors.splice(1,0,"yellow","orange"); //从下标1的位置插入两项
alert(colors); //green,yellow,orange,blue
alert(removed); //返回的是一个空数组,因为没有进行删除项

removed = colors.splice(1,1,"red","purple"); //删除下标1位置的项并插入两项
alert(colors); //green,red,purple,orange,blue
alert(removed); //yellow,返回的数组中只包含删除的一项

5.位置方法

ECMAScript方法为数组添加了两个位置方法:

①indexOf()

②lastIndexOf()

这两个方法都接收两个参数:要查找的项和查找位置的起点索引(可选),查找到的项严格遵守===,存在返回索引,不存在返回-1;
区别在于indexOf()从数组的开头往后查找,lastIndexOf从末尾项向开头查找。
案例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var numbers = [1,2,3,4,5,4,3,2,1];
alert(numbers.indexOf(4)); //3 返回4所在的下标位置
alert(numbers.lastIndexOf(4)); //5 倒数位置开始查找第一个4出现的下标索引

alert(numbers.indexOf(4,4)); //5 从开始下标4开始查找第一个出现4的下标索引
alert(numbers.lastIndexOf(4,4)); //3 查找第一项4,从下标为4的位置进行倒序查找

var person = {name: "Tom"}; //创建了一个person对象
var person = [{name: "Tom"}]; //创建了一个数组里面包含有一个对象

var morePeople = [person];

alert(people.indexOf(person)); //-1 这里的person 与{name: "Tom"}虽然表示的字面量一样,但是却不是同一个对象
alert(morePeople.indexOf(person)); //0 这里是同一个person故正确返回位置0

5.迭代方法

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

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

1
2
3
4
var numbers = [1,2,3,4,5,4,3,2,1];
var everyResult = numbers.every(function(item,index,array){
return(item > 2); //false 每一项都大于2则返回true
})

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

1
2
3
4
5
var numbers = [1,2,3,4,5,4,3,2,1];
var everyResult = numbers.filter(function(item,index,array){
return(item > 2);
})
alert(everyResult); //3,4,5,4 只过滤出大于2的所有的项

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

1
2
3
4
var numbers = [1,2,3,4,5,4,3,2,1];
numbers.forEach(function(item,index,array){
alert(item); //依次输出数组中的项 forEach()函数没有返回值,内部可以写相应的逻辑语句
})

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

1
2
3
4
5
var numbers = [1,2,3,4,5,4,3,2,1];
var everyResult = numbers.map(function(item,index,array){
return(item + 2);
})
alert(everyResult); //3,4,5,6,7,6,5,4,3 将数组中的每一项加2后构建新数组输出

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

1
2
3
4
5
var numbers = [1,2,3,4,5,4,3,2,1];
var everyResult = numbers.some(function(item,index,array){
return(item > 2);
})
alert(everyResult); //true 数组中有一项大于2则输出true

6.归并方法

ECMAScript5新增两个归并数组的方法reduce(),reduceRight(),这两个函数接收四个参数:前一个值、当前值、项的索引和数组第项。这个函数返回的任何值都会作为第一个参数传给下一项。第一次迭代是在数组的第二项上,因此第一个参数是数组的第一项,第二个参数是数组额第二项。

①reduce()

1
2
3
4
5
var values = [1,2,3,4,5];
var sum = values.reduce(function(prev,cur,index,array){
return prev + cur; //第一次执行回调函数prev是1,cur是2,index是1
});
alert(sum); //15

②reduceRight()

该函数作用与reduce()类似只不过方向相反而已

1
2
3
4
5
var values = [1,2,3,4,5]; 
var sum = values.reduceRight(function(prev, cur, index, array){
return prev + cur;
});
alert(sum); //15

在这个例子中,第一次执行回调函数,prev 是 5,cur 是 4。当然,最终结果相同,因为执行的都
是简单相加的操作.
小结:使用 reduce()还是 reduceRight(),主要取决于要从哪头开始遍历数组。除此之外,它们完全
相同.