js map, reduce, filter 等高阶函数

1. JavaScript的函数其实都指向某个变量。既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。
    function add(x, y, f) {
        return f(x) + f(y);
    }
    add(-3,4,Math.abs);//7
2. forEach:让数组的每一项做一件事情
   var a=[1,2,3];
   a.forEach(item=>{console.log(item);})//1 2 3
   2.1 回调支持3个参数,第1个是遍历的数组内容;第2个是对应的数组索引,第3个是数组本身。
        var a=[1,2,3];
        a.forEach((value,index,arr)=>{
            console.log(value);
            console.log(index);
            console.log(arr);
        });
    2.2 forEach除了接受一个必须的回调函数参数,还可以接受一个可选的上下文参数(改变回调函数里面的this指向)(第2个参数):array.forEach(callback,[ thisObject]),如果这第2个可选参数不指定,则使用全局对象代替(在浏览器是为window),严格模式下甚至是undefined.
    var data={users:["kenn","keny","kit"],checkUser:function(user){
        console.log(user);
    } };
    data.users.forEach(data.checkUser,data);
3. map:让数组通过某种计算产生一个新数组
    var a=[1,2,3];
    a.map((item,index)=>{return item*item});//[1,4,9]
4. filter:筛选出符合条件的项,组成新数组
    var a=[1,2,3];
    a.filter(item=>item>2);//[3]
5. reduce:让数组中的前项和后项做某种计算,并累计最终值;array.reduce(callback[, initialValue]);callback函数接受4个参数:之前值、当前值、索引值以及数组本身。initialValue参数可选,表示初始值。若指定,则当作最初使用的previous值;如果缺省,则使用数组的第一个元素作为previous初始值,同时current往后排一位,相比有initialValue值少一次迭代。
    var a=[1,2,3];
    a.reduce(function(pre,next){return pre+next});//6
6. reduceRight:与reduce类型,只是reduceRight是从数组的末尾向前弄的
    var data=[1,2,3,4,5]
    var res=data.reduceRight(function(previous,current,index){ console.log(`index:${index};previous:${previous};current:${current}`)});
    index:3;previous:5;current:4
    index:2;previous:undefined;current:3
    index:1;previous:undefined;current:2
    index:0;previous:undefined;current:1
7. every:检测数组中的每一项是否符合条件,每一项都要符合条件
    var a=[1,2,3];
    a.every(function(item){return item>0;});//true
    a.every(function(item){return item>1;});//false
8. some:检测数组中的是否有某些项符合条件,至少有一个对就可以了
    var a=[1,2,3];
    a.some(function(item){return item>3;});//false
    a.some(function(item){return item>2;});//true

猜你喜欢

转载自www.cnblogs.com/shuajing/p/10829855.html