高阶函数
一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。
function add(x, y, f) { return f(x) + f(y); }
var x = add(-5, 6, Math.abs); alert(x);
var x = Math.abs(-5)+ Math.abs(6)
|
map
由于map()方法定义在JavaScript的Array中,我们调用Array的map()方法,传入我们自己的函数,就得到了一个新的Array作为结果:
var arr=[1,2,3,4,5,6];
function f(x){ return x*x}; var xx=arr.map(f);
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
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的所有数字转为字符串:
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]; arr.map(String);
|
reduce
Array的reduce()把一个函数作用在这个Array的[x1, x2, x3…]上,这个函数必须接收两个参数,reduce()把结果继续和序列的下一个元素做累积计算,其效果就是:
[x1, x2, x3, x4].reduce(f) = f(f(f(x1, x2), x3), x4)
|
数列求和:
function f(x,y){ return x+y};
var arr=[1,2,3,4]; arr.reduce(f)
|
for 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()求积:
'use strict';
function product(arr) { var f=function(x,y){return x*y}; return arr.reduce(f);
}
|
利用map和reduce操作实现一个string2int()函数:
'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); }
|