javascript高阶函数学习---map、reduce

高阶函数之map:

如果之前学过python之类的语言应该对这个函数很熟悉,其实在javascript中map函数的功能几乎一样。举例说明我们如果要求1~10的平方我们会怎样做呢,for循环是最基本的做法,今天给大家介绍一个非常简便的函数map。

  • map函数的定义
    这里写图片描述
    map函数有参数,参数是一个函数。
    我们可以看到map函数实际上是将一个Array传进去,然后遍历array中的每一个值进行函数处理后又返回一个Array,所以如果我们要进行1~10的平方就会很简单。
var num = [1,2,3,4,5,6,7,8,9,10];
var results = num.map(function(x){
    return x*x;
});

map()作为高阶函数,事实上它把运算规则抽象了,因此,我们不但可以计算简单的f(x)=x2,还可以计算任意复杂的函数,比如,把Array的所有数字转为字符串:

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

可以看到在我们用了map函数后进行运算是多么地简单。

高阶函数之reduce:

除了map()函数之外还有一个高阶函数需要我们掌握,reduce()。

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

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

比方说求和:

var num = [1,2,3,4,5];
var sum = num.reduce(function(x,y){
    return x+y;
});//answer:15

小明希望利用map()把字符串变成整数,他写的代码很简洁:


var arr = ['1', '2', '3'];
var r;
r = arr.map(parseInt);

结果竟然是[1,NaN,NaN],这是为什么呢?
这是因为由于map()接收的回调函数可以有3个参数:callback(currentValue, index, array),通常我们仅需要第一个参数,而忽略了传入的后面两个参数。不幸的是,parseInt(string, radix)没有忽略第二个参数,导致实际执行的函数分别是:


parseInt('0', 0); // 0, 按十进制转换

parseInt('1', 1); // NaN, 没有一进制

parseInt('2', 2); // NaN, 按二进制转换不允许出现2

所以才会出现刚刚的结果哦,我们可以将ParseInt改为Number,因为Number(value)函数只接受一个参数。

注意:这两个函数都是Array的函数。

猜你喜欢

转载自blog.csdn.net/kesilll/article/details/79880506