美文网首页
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-高阶函数

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