javascript中的reduce

404 阅读1分钟

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来计算一个字符串中每个字母出现次数等等用法。