美文网首页
JS数组方法reduce()的一些用法

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

作者: 微志异 | 来源:发表于2019-12-27 11:37 被阅读0次
    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()的一些用法

          本文链接:https://www.haomeiwen.com/subject/rygroctx.html