ES5新增的数组方法map(),forEach(),filter(),some(),every(),reduce(),indexOf()
ES5新增了好几个数组方法供我们使用,让我们对数组的操作能更加方便快捷。除了indexOf()外,剩下几个数组方法都属于高阶函数,需要结合回调函数使用。还需要注意的一点是IE8以下的版本不能使用map和forEach方法。
-
map()和forEach()
map()和forEach()非常相似,区别在于map的回调函数支持return返回,因此foeEach一般用于数组遍历,map一般用于数组运算。
先来看看forEach():
var array = [5, 2, 8]; array.forEach(function (el, index, array) { console.log("el:"+el+" index:"+index+" array:"+array); }); // el:5 index:0 array:5,2,8,9,3 // el:2 index:1 array:5,2,8,9,3 // el:8 index:2 array:5,2,8,9,3再对比map():
var array = [5, 2, 8, 9, 3]; var res = array.map(function (el, index, array) { return el*2; }); console.log(res);//[10,4,16,18,6] -
filter()
返回满足条件元素组成的新数组
var array = [5, 2, 8, 9, 3]; var res = array.filter(function (el, index, array) { return el!=2; }); console.log(res);//[5,8,9,3] -
some()
如果存在一个就返回true
var array = [5, 2, 8, 9, 3]; var res = array.some(function (el, index, array) { return el==5; }); console.log(res);//true -
every()
所有元素都满足才会返回true
var array = [5, 2, 8, 9, 3]; var res = array.every(function (el, index, array) { return el>1; }); console.log(res);//true -
reduce()
reduce()方法有两个参数,第一个参数是回调函数,回调函数的参数变成了pre,cur,index,array分别表示初始值,当前值,下标,当前数组。第二个参数是迭代初始值,可有可无,如果缺省的话初始值为数组第一项,比正常传值要少一次运算。这么讲可能不是很明白,上代码可能就好理解多了。
以下为传第二个参数的结果:
var arr = [1,2,3,4,5]; var res = arr.reduce(function (pre, cur,index,array) { console.log("pre:"+pre+" cur:"+cur); return pre + cur; }); console.log(res); // pre: 1 cur: 2 // pre: 3 cur: 3 // pre: 6 cur: 4 // pre: 10 cur: 5 // 15可见pre的初始值为1,即数组的第一位,往后每一个值都是函数前一次迭代所返回的值,即累加的值,注意看cur的值是从数组第二位开始的,最终返回的就是整个数组的和。
再来看看第二个参数传值的情况:
var arr = [1, 2, 3, 4, 5]; var res = arr.reduce(function (pre, cur, index, array) { console.log("pre:" + pre + " cur:" + cur); return pre + cur; },2); console.log(res);//pre: 2 cur: 1 // pre: 3 cur: 2 // pre: 5 cur: 3 // pre: 8 cur: 4 // pre: 12 cur: 5 // 17看出区别了吗,此时的pre初始值是传入的参数2,cur变成了从数组第一位开始,也就是说传入参数后比没有传入参数只是多了一次运算,最终相加的结果也是多加了这个传入的参数的结果。
-
indexOf()
该方法有两个参数,第一个参数是要查找的值,第二个参数是查找起点位置的下标,第二个参数如果缺省就默认从数组起点开始找,找到的话返回该值所在的下标,没找到的话返回-1。举个例子:
var array = [5, 2, 8, 9, 3]; console.log(array.indexOf(2));//1 console.log(array.indexOf(9,1));//3 console.log(array.indexOf(0,1));//-1

浙公网安备 33010602011771号