reduce的定义和用法
reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
reduce() 可以作为一个高阶函数,用于函数的 compose。
注意: reduce() 对于空数组是不会执行回调函数的。
语法
array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
参数详解
function(total,currentValue, index,arr):
total: 必需。初始值, 或者计算结束后的返回值。
currentValue: 必需。当前元素。
currentIndex: 可选。当前元素的索引。
arr: 可选。当前元素所属的数组对象。
initialValue: 可选。传递给函数的初始值
应用
实例1:
var items = [10, 120, 1000];
// our reducer function
var reducer = function add(sumSoFar, item) { return sumSoFar + item; };
// do the job
var total = items.reduce(reducer, 0);
console.log(total); // 1130
可以看出,reduce函数根据初始值0,不断的进行叠加,完成最简单的总和的实现。
reduce函数的返回结果类型和传入的初始值相同,上个实例中初始值为number类型,同理,初始值也可为object类型。
实例2
var arr = ['李华', '男', '18'];
var info = ['name', 'sex','age']
var persionObject = arr.reduce(
(total, item, index) => {
return {
...total,
[info[index]]: item
}
},
{}
)
console.log(persionObject);
// {name: "李华", sex: "男", age: "18"}
可以看出,上面的两个数组通过reduce进行了拼接,最后成为了一个对象。
实例3
const str = 'jshdjsihh';
const obj = str.split('').reduce((pre,item) => {
pre[item] ? pre[item] ++ : pre[item] = 1
return pre
},
{}
)
console.log(obj) // {j: 2, s: 2, h: 3, d: 1, i: 1}
还可以利用reduce来计算一个字符串中每个字母出现次数等等用法。