美文网首页
js笔记03-高阶函数

js笔记03-高阶函数

作者: 大飞哥 | 来源:发表于2017-12-27 23:38 被阅读4次

高阶函数

function add(x, y, f) {
    return f(x) + f(y);
}

这样就可以调用add(-5, 6, Math.abs)

map/reduce

map

map()方法定义在JavaScript的Array

function pow(x) {
    return x * x;
}
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
var results = arr.map(pow); // [1, 4, 9, 16, 25, 36, 49, 64, 81]
console.log(results); //1,4,9,16,25,36,49,64,81
reduce

Arrayreduce()把一个函数作用在这个Array[x1, x2, x3...]上,这个函数必须接收两个参数,reduce()把结果继续和序列的下一个元素做累积计算,其效果就是:

[x1, x2, x3, x4].reduce(f) = f(f(f(x1, x2), x3), x4)

要把[1, 3, 5, 7, 9]变换成整数13579,reduce()也能派上用场:

//注意函数定义的方法
var arr = [1, 3, 5, 7, 9];
arr.reduce(function (x, y) {
    return x * 10 + y;
}); // 13579
var arr = ['1', '2', '3'];
var r;
r = arr.map(parseInt);
console.log(r);//给出的结果是 1, NaN, NaN ???

因为:
parseInt(string, radix)
其实parseInt是由两个参数的.parseInt(string, radix)

参数 描述
string 必需。要被解析的字符串。
radix 可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。

如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果它以 “0x” 或 “0X” 开头,将以 16 为基数。

如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。

然后map是可以有三个参数的
arr.map(function callback(currentValue[, index[, array]])
第一参数value,数组元素的值;第二个参数index,数组元素的数组索引;array,包含该元素的数组对象。
所以arr.map(parseInt);
[parseInt(1,0),parseInt(2,1),parseInt(3,2)]
参考

filter

Arrayfilter()也接收一个函数,把传入的函数依次作用于每个元素,然后根据返回值是true还是false决定保留还是丢弃该元素
例如:

var arr = [1, 2, 4, 5, 6, 9, 10, 15];
var r = arr.filter(function (x) {
    return x % 2 !== 0;
});
r; // [1, 5, 9, 15]

其实filter()有三个参数

var arr = ['A', 'B', 'C'];
var r = arr.filter(function (element, index, self) {
    console.log(element); // 依次打印'A', 'B', 'C'
    console.log(index); // 依次打印0, 1, 2
    console.log(self); // self就是变量arr
    return true;
});
sort

sort()方法默认把所有元素先转换为String再排序,所以

[10, 20, 1, 2].sort(); // [1, 10, 2, 20]

数字大小排序

var arr = [10, 20, 1, 2];
arr.sort(function (x, y) {
    if (x < y) {
        return -1; //返回-1,则不需要交换
    }
    if (x > y) {
        return 1; //返回1,则需要交换
    }
    return 0;
});
console.log(arr); // [1, 2, 10, 20]

最后,sort()方法会直接对Array进行修改,它返回的结果仍是当前Array

相关文章

  • js笔记03-高阶函数

    高阶函数 这样就可以调用add(-5, 6, Math.abs) map/reduce map map()方法定义...

  • [JS函数] (Array)の高阶函数

    JS函数 高阶函数 高阶函数英文叫Higher-order function。那么什么是高阶函数? JavaScr...

  • 【JS】高阶函数与函数柯里化

    高阶函数 至少满足以下条件的函数: 接受一个或多个函数作为输入 输出一个函数JS高阶函数浅析[https://gi...

  • 高级语法

    高阶函数:以其他函数作为其参数或者返回值的函数。跟JS一样,python提供了部分内置高阶函数 匿名函数:pyth...

  • 高阶组件

    高阶函数:接受一个或多个函数并返回一个函数 JS中,array的map、filter、reduce等方法就是高阶函...

  • python函数式编程

    高阶函数 把函数作为参数传入,这样的函数称为高阶函数,函数式编程就是指这种高度抽象的编程范式。与js相似,与c#中...

  • js高阶函数

    一、函数作为参数传递 1、回调函数 ajax异步请求 2、Array.prototype.sort 二、函数作为返...

  • JS高阶函数

    1.map: var arr=[1,2,3,4]; arr.map(function_name); 这传入的方法会...

  • js高阶函数

    bind可以利用此种特性方便代码重用,如下,可以不同的页面中只需要配置某几项,前面几项固定的配置可以选择用bind...

  • JS 高阶函数

    最近在学习函数式编程,整个 team 都在啃一本叫《Mostly adequate guide》的函数式编程教材,...

网友评论

      本文标题:js笔记03-高阶函数

      本文链接:https://www.haomeiwen.com/subject/tvwpgxtx.html