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);
|
数组去重
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);
|
数组归类
首先准备一个数组,然后开始使用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);
|