JavaScript(四)高阶函数

11,高阶函数

11.1,高级函数的定义

JavaScript的函数其实都指向某个变量。既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数

11.2,高价函数的应用

map 实现数组级别的f(x^2)

function f() {
    var arr=[1,2,35,44];
    var arr2 =arr.map(
        function (x) {
             return x*x;
        }
    );
    console.log(arr2);//(4) [1, 4, 1225, 1936]
}

reduce 实现数组元素转数字 ,数组元素的求和,数组元素的求积

function f1() {
    var arr=[1,2,3,4,5];
    var arr2 =arr.reduce(function (x,y) {
         return x*10+y;
    });
    var arr3 = arr.reduce(function (x,y) {
         return x+y;
    });
    var arr4 =arr.reduce(function (x,y) {
          return x*y;
    });
    console.log(arr2);//12345
    console.log(arr3);//15
    console.log(arr4);//120
}

map:请把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字

function f2(arr) {
    var arr2 = arr.map(function (x) {
         return x[0].toUpperCase()+x.substring(1,x.length).toLowerCase();
    })
    console.log(arr2);

}

注意点:arr.map会为调用的函数传入以下三个参数:
1、currentValue,数组中当前被传递的元素
2、index,数组中当前被传递的元素的索引
3、array,调用 map 方法的数组

filter

filter也是一个常用的操作,它用于把Array的某些元素过滤掉,然后返回剩下的元素。

map()类似,Arrayfilter()也接收一个函数。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是true还是false决定保留还是丢弃该元素。

//利用filter去除偶数元素
function f() {
   var arr = [1,123,412,5,1231,1,23];
   console.log(arr.filter(function (x) {
        return x%2;
   }));
}
f();//(6) [1, 123, 5, 1231, 1, 23]

可见用filter()这个高阶函数,关键在于正确实现一个“筛选”函数。

filter 传入函数中的参数和map一致,我们可以利用index,实现数组的去重,保留数组的最后一个元素

r = arr.filter(function (element, index, self) {
    return self.indexOf(element) === index;
});

sort

Array的sort方法同样是一个高阶函数,我们可以利用这一特性,实现自定义排序

这里注意一点,JavaScript 的sort 会把所有的元素,先转化为字符串就行比较

//利用sort自定义数字排序
function f() {
   var arr = [2,124,412,6,1232,4,24];
   console.log(arr.sort());//正常排序
   console.log(arr.sort(function (x,y) {
       if(x<y){
           return -1;
       }else if(x===y){
           return  0;
       }else{
           return 1;
       }

   }));
}
f();// [1232, 124, 2, 24, 4, 412, 6]、[2, 4, 6, 24, 124, 412, 1232]

every

every()方法可以判断数组的所有元素是否满足测试条件。

function f() {
   var arr = [2,124,412,6,1232,4,24];
   console.log(arr.every(function (x) {
        if(x%2===0){
            return true;
        }else{
            return false;
        }
   }));
}
f();//true

find

find()方法用于查找符合条件的第一个元素,如果找到了,返回这个元素,否则,返回undefined

var arr = ['Apple', 'pear', 'orange'];
console.log(arr.find(function (s) {
    return s.toLowerCase() === s;
})); // 'pear', 因为pear全部是小写

console.log(arr.find(function (s) {
    return s.toUpperCase() === s;
})); // undefined, 因为没有全部是大写的元素

for each

forEach()map()类似,它也把每个元素依次作用于传入的函数,但不会返回新的数组。forEach()常用于遍历数组,因此,传入的函数不需要返回值:

var arr = ['Apple', 'pear', 'orange'];
arr.forEach(console.log); // 依次打印每个元素
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值