ES5新增的数组方法map(),forEach(),filter(),some(),every(),reduce(),indexOf()

ES5新增了好几个数组方法供我们使用,让我们对数组的操作能更加方便快捷。除了indexOf()外,剩下几个数组方法都属于高阶函数,需要结合回调函数使用。还需要注意的一点是IE8以下的版本不能使用map和forEach方法。

  1. 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]
    
  2. 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]
    
  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
    
  4. every()

    所有元素都满足才会返回true

    var array = [5, 2, 8, 9, 3];
            var res = array.every(function (el, index, array) {
                return el>1;
            });
            console.log(res);//true
    
  5. 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变成了从数组第一位开始,也就是说传入参数后比没有传入参数只是多了一次运算,最终相加的结果也是多加了这个传入的参数的结果。

  6. 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
    
posted @ 2021-05-19 16:00  橘子酱酱  阅读(272)  评论(0)    收藏  举报