reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。

reduce() 可以作为一个高阶函数,用于函数的 compose。

语法

1
array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
参数 描述
total 必需。初始值, 或者计算结束后的返回值。
currentValue 必需。当前元素
currentIndex 可选。当前元素的索引
arr 可选。当前元素所属的数组对象。

找最大值

1
2
3
4
// 找最大值
const result = [1,2,3,3,2,1,6,5].reduce((x,y) => Math.max(x,y));
// 打印结果
console.log(result); // 6

数组去重

1
2
3
4
5
6
7
8
9
10
// 去重
const result = [1,2,3,3,2,1,6,5].reduce((x,y) => {
// 检测是否存在
if(x.indexOf(y) === -1){
x.push(y);
}
return x;
},[]);
// 打印结果
console.log(result); // [ 1, 2, 3, 6, 5 ]

数组归类

首先准备一个数组,然后开始使用reduce方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 数组
const dataList = [
{name:'武器',value:'木剑'},{name:'防具',value:'锁子甲'},
{name:'武器',value:'铁剑'},{name:'消耗品',value:'苹果'},
{name:'消耗品',value:'西瓜'}
];
// 归类
const resultObj = dataList.reduce((x,y) => {
const { name } = y;
if(!x[name]){
x[name] = [];
}
x[name].push(y.value);
return x;
},{});
// 打印结果
console.log(resultObj); // 拿到的结果{ '武器': [ '木剑', '铁剑' ], '防具': [ '锁子甲' ], '消耗品': [ '苹果', '西瓜' ] }

字符串反转

1
2
3
4
5
6
7
8
// 字符串
const str = 'hello word';
// 先转成数组 然后反转
const resultStr = Array.from(str).reduce((x,y) => {
return `${y}${x}`
},'');
// 打印结果
console.log(resultStr); // drow olleh