It has been 1485 days since the last update, the content of the article may be outdated.

高阶函数

一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。

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

var x = add(-5, 6, Math.abs); // 11
alert(x);

//等价于

var x = Math.abs(-5)+ Math.abs(6)

map

由于map()方法定义在JavaScript的Array中,我们调用Array的map()方法,传入我们自己的函数,就得到了一个新的Array作为结果:

javascript
var arr=[1,2,3,4,5,6];

function f(x){
return x*x};
var xx=arr.map(f); //[1, 4, 9, 16, 25, 36]


//等价于
var f = function (x) {
return x * x;
};

var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
var result = [];
for (var i=0; i<arr.length; i++) {
result.push(f(arr[i]));
}

for python

python
def f(x):
return x*x

arr=[1,2,3,4,5,6]
xx=list(map(f,arr)) //[1, 4, 9, 16, 25, 36]

//or

xx=list(map(lambda x:x*x,arr)) //[1, 4, 9, 16, 25, 36]

f()可以是任意函数,比如,把Array的所有数字转为字符串:

javascript
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
arr.map(String); // ['1', '2', '3', '4', '5', '6', '7', '8', '9']

reduce

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

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

数列求和:

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


var arr=[1,2,3,4];
arr.reduce(f)//10

//f(f(f(1,2),3),4)

for python

python
def f(x,y):
return x+y

arr=[1,2,3,4]
reduce(f,arr)//10

//or
reduce(lambda x,y:x+y,arr)//10

利用reduce()求积:

javascript
'use strict';

function product(arr) {
var f=function(x,y){return x*y};
return arr.reduce(f);

//return arr.reduce(function(x,y){return x*y});
}

利用map和reduce操作实现一个string2int()函数:

javascript
'use strict';
function string2int(s) {
function str2array(x) {
return x - '0';
}
function array2int(x, y) {
return x * 10 + y;
}
arr = []
for (k of s) {
arr.push(k);
}
return arr.map(str2array).reduce(array2int);
}