在上一博文中介绍了JavaScript中的数据类型,同时也例举了一些数组的一些常用的方法。本篇文章,将继续介绍数组的操作方法——ECMA5中的数组新特性。
ECMA5中的数组新特性
一、元素定位方法
indexOf:返回指定元素在数组中从指定索引开始从前向后首次出现的位置,索引从0开始,未找到指定元素时返回-1。
该方法是个重载方法:一个入参,两个入参
array.indexOf(searchValue);//默认从索引0开始查找
array.indexOf(searchvalue,fromindex);var arr=[1,2,4,23,4,5,7,3];//定义数组 //一个参数的indexOf方法调用:arr.indexOf(value); var result1 = arr.indexOf(4); console.log(result1);//控制台输出2 var result2 = arr.indexOf(43); console.log(result2);//控制台输出-1 var arr=[1,2,4,23,4,5,7,3];//定义数组 //两个参数的indexOf方法调用:arr.indexOf(searchValue,fromIndex); var result3 = arr.indexOf(3,4);//从索引4开始向后找元素3首次出现时的索引 console.log(result3);//控制台输出7 var result4 = arr.indexOf(6,4);//从索引4开始向后找元素6首次出现时的索引 console.log(result4);//控制台输出-1
lastIndexOf:返回指定元素在数组中从指定索引开始从后向前首次出现的位置,索引从0开始,未找到指定元素时返回-1。
该方法是个重载方法:一个入参,两个入参
array.lastIndexOf(searchValue);//默认从索引0开始查找
array.lastIndexOf(searchvalue,fromindex);var arr=[1,2,4,23,4,5,7,3];//定义数组 //一个参数的lastIndexOf方法调用:arr.lastIndexOf(value); var result1 = arr.lastIndexOf(4); console.log(result1);//控制台输出4 var result2 = arr.lastIndexOf(43); console.log(result2);//控制台输出-1 var arr=[1,2,4,23,4,5,7,3];//定义数组 //两个参数的lastIndexOf方法调用:arr.lastIndexOf(searchValue,fromIndex); var result3 = arr.lastIndexOf(3,4);//从索引4开始向前找元素3首次出现时的索引 console.log(result3);//控制台输出-1 var result4 = arr.lastIndexOf(6,4);//从索引4开始向前找元素6首次出现时的索引 console.log(result4);//控制台输出-1
注意:元素定位方法在定位比较时采用的是===比较,而不是==比较。从下例可以看出:
var t=[1,2,3,0];
t.indexOf(true);//返回false
二、元素迭代方法(循环)
every:循环遍历数组的所有元素,并执行相应的方法同时返回一个值,如果所有的都返回true则为true,否则为false。
//例如:需要判断一个数字数组的每一项是否都大于2或者小于10 var arr=[2,3,5,6,7]; var result = arr.every(function(item,index,array){ return item>2; }) var result1 = arr.every(function(item,index,array){ return item<10; }) console.log(result);//控制台输出:false console.log(result1);//控制台输出:true
filter:过滤数组的元素,所以符合条件的元素组成数组并返回
//例如:数字数组中需要返回所有大于4的数 var arr=[2,3,5,6,7]; var result = arr.filter(function(item,index,array){ return item>4; }) console.log(result);//控制台输出:[5,6,7]
forEach:循环数组的每一项,并执行一个方法
//输出每一个数字 var arr=[2,3,5,6,7]; var result = arr.forEach(function(item,index,array){ console.log(2); })
map:遍历循环数组的所以元素,每一个元素执行一个方法,并把执行结果组成一个新的数组返回
//数字数组的每一项翻倍 var arr=[2,3,5,6,7]; var result = arr.map(function(item,index,array){ return item*2; }) console.log(result);//控制台输出:[4, 6, 10, 12, 14]
some:和every方法相反,自己尝试练习一下吧
三、缩小方法
reduce:reduce()方法接收一个函数callbackfn作为累加器(accumulator),数组中的每个值(从左到右)开始合并,最终为一个值。
- 语法:array.reduce(callbackfn,[initialValue])
- 参数:reduce()方法接收callbackfn函数,而这个函数包含四个参数:function callbackfn(preValue,curValue,index,array){}
preValue: 上一次调用回调返回的值,或者是提供的初始值(initialValue)
curValue: 数组中当前被处理的数组项
index: 当前数组项在数组中的索引值
array: 调用 reduce()方法的数组
而initialValue作为第一次调用 callbackfn函数的第一个参数。
//未设置initialValue值时 var arr = [0,1,2,3,4]; arr.reduce(function (preValue,curValue,index,array) { return preValue + curValue; });//结果返回:10 //设置initialValue=5时 var arr = [0,1,2,3,4]; arr.reduce(function (preValue,curValue,index,array) { return preValue + curValue; },5);//结果返回:15
reduceRight:和reduce的作用基本相同,只不过操作方向相反,是从右到左。
总结:ECMA5为数组提供的新方法还是很实用的,而且实现也非常简单,有兴趣的可以去翻查一下相应方法的源码,没兴趣的可以记下来,以备不时之需。希望对大家有所帮助。