js笔记03-高阶函数

2017-12-27  本文已影响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

上一篇下一篇

猜你喜欢

热点阅读