map reduce的使用

1.map() 方法:

原数组中的每个元素调用一个指定方法后,返回返回值组成的新数组

1
arr.map(function)

例子:
有一个数组x=[1, 2, 3, 4, 5, 6, 7, 8, 9],求x^2

实现过程

1
2
3
4
5
6
7
8
function pow(x){  //定义一个平方函数
return x*x;
}

var arr=[1,2,3,4,5,6,7,8,9];
var result = arr.map(pow); //map()传入的是函数对象本身
console.log(result); //结果:[1,4,9,16,25,36,49,64,81];

2.reduce()方法:

为数组中的每一个元素依次执行回调函数(不包括数组中被删除或从未被赋值的元素),返回一个具体的结果

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

一、语法

1
2
3
arr.reduce(function(prev,cur,index,arr){
...
}, init);

其中,
arr 表示原数组;
prev 表示上一次调用回调时的返回值,或者初始值 init;
cur 表示当前正在处理的数组元素;
index 表示当前正在处理的数组元素的索引,若提供 init 值,则索引为0,否则索引为1;
init 表示初始值。

看上去是不是感觉很复杂?没关系,只是看起来而已,其实常用的参数只有两个:prevcur。接下来我们跟着实例来看看具体用法吧~

二、实例

先提供一个原始数组:

1
var arr = [3,9,4,3,6,0,9];

实现以下需求的方式有很多,其中就包含使用reduce()的求解方式,也算是实现起来比较简洁的一种吧。

1. 求数组项之和

1
2
3
var sum = arr.reduce(function (prev, cur) {
return prev + cur;
},0);

也可以把function拆出来写。

由于传入了初始值0,所以开始时prev的值为0,cur的值为数组第一项3,相加之后返回值为3作为下一轮回调的prev值,然后再继续与下一个数组项相加,以此类推,直至完成所有数组项的和并返回。它可以自动移动prev,cur指针到下一个!

2. 求数组项最大值

1
2
3
var max = arr.reduce(function (prev, cur) {
return Math.max(prev,cur);
});

由于未传入初始值,所以开始时prev的值为数组第一项3,cur的值为数组第二项9,取两值最大值后继续进入下一轮回调。

3. 数组去重

1
2
3
4
var newArr = arr.reduce(function (prev, cur) {
prev.indexOf(cur) === -1 && prev.push(cur);
return prev;
},[]);

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!