JS数组方法reduce()的一些用法

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

reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素,接受四个参数:初始值(或者上一次回调函数的返回值),当前元素,当前索引,调用 reduce 的数组。

arr.reduce(callback, [initialValue])

callback (执行数组中每个值的函数,包含四个参数)

  • previousValue (上一次调用回调返回的值,或者是提供的初始值(initialValue))
  • currentValue (数组中当前被处理的元素)
  • index (当前元素在数组中的索引)
  • array (调用 reduce 的数组)

initialValue (作为第一次调用 callback 的第一个参数。)

举例子

某同学的期末成绩如下表示

const result = [
    {
        subject: 'math',
        score: 88
    },
    {
        subject: 'chinese',
        score: 95
    },
    {
        subject: 'english',
        score: 80
    }
];

如何求该同学的总成绩?

const sum = result.reduce((prev, cur) => {
    return cur.score + prev;
}, 0);

假设该同学因为违纪被处罚在总成绩总扣10分,只需要将初始值设置为-10即可。

const sum = result.reduce((prev, cur) => {
    return cur.score + prev;
}, -10);

假如该同学的总成绩中,各科所占的比重不同,分别为50%,30%,20%,我们应该如何求出最终的权重结果呢?

const dis = {
    math: 0.5,
    chinese: 0.3,
    english: 0.2
};

const qsum = result.reduce((prev, cur) => {
    return cur.score * dis[cur.subject] + prev;
}, 0);

再看一个例子,如何知道一串字符串中每个字母出现的次数?

const arrString = 'asdfjjfsfljfajfdjad';

arrString.split('').reduce((res, cur) => {
    res[cur] ? res[cur]++ : res[cur] = 1;
    return res;
}, {});

你可能感兴趣的:(JS数组方法reduce()的一些用法)