首页 > 代码库 > map和reduce函数的使用

map和reduce函数的使用

map和reduce函数是定义在Array中的两个方法,可用于提高处理数组的性能和简化代码。

关于它们的概念,参考Google这篇大名鼎鼎的论文“MapReduce: Simplified Data Processing on Large Clusters”。

map

map函数是一个高阶函数,它会调用传入的函数来隐式的处理Array中的每一个元素,因此当我们确定好需要对数组中的每个元素进行的操作时,可先定义好处理的方法,

然后在通过map函数将定义好的函数作为参数传进去,这样浏览器就会自己使用传入的函数来处理数组中的每一个元素并返回处理结束后的新数组。

示例代码如下:

function pow(x) {  //简单的平方函数
    return x * x;
}

var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
arr.map(pow); // 返回新数组[1, 4, 9, 16, 25, 36, 49, 64, 81] 

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‘]

reduce

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

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

比如我们做一个简单的累加器:

var arr = [1,2,3,4,5,6];
var sum = arr.reduce(function add(x,y){
    return x+y;
});

甚至于我们如果想把一个整数型的数组变成一个整数,也可以这样处理:

var arr = [1, 3, 5, 7, 9];
arr.reduce(function (x, y) {
    return x * 10 + y;
}); // 13579

 

map和reduce函数的使用