• 数组的reduce方法常用的几种情形


    1、语法

    arr.reduce(function(prev,cur,index,arr){
        ...
    }, init);

    arr 表示原数组;
    prev 表示上一次调用回调时的返回值,或者初始值 init;
    cur 表示当前正在处理的数组元素;
    index 表示当前正在处理的数组元素的索引,若提供 init 值,则索引为0,否则索引为1;
    init 表示初始值,若没有提供init值,初始时prev为数组第一项,cur为第二项。

    2、常用情形

    (1)数组求和

    <script type="text/javascript">
         const arr = [1,2,3,4];
         const sum1 = arr.reduce((pre, cur)=>{
             return pre + cur;
         })
         console.log(sum1); // 10=1+2+3+4
    
         const sum2 = arr.reduce((pre, cur)=>{
             return pre + cur;
         }, 1)
         console.log(sum2); // 11=1+1+2+3+4
    </script>

    (2)计算数组中最大值

    var arr = [3,9,4,3,6,0,9];
    var max = arr.reduce(function (prev, cur) {
        return Math.max(prev,cur);
    });

    (3)计算数组中每个元素出现的次数

    <script type="text/javascript">
        const arr = ['a','b','a','c','b','a','c'];
        const count = arr.reduce((pre, cur)=>{
            if(cur in pre) {
                pre[cur]++;
            } else {
                pre[cur] = 1;
            }
            return pre
        },{})
        console.log(count);  // {a: 3, b: 2, c: 2}
    </script>

    (4)数组去重

    <script type="text/javascript">
        const arr = ['a','b','a','c','b','a','c'];
        const newArr = arr.reduce((pre, cur)=>{
            if (!pre.includes(cur)) {
                return pre.concat(cur)
            } else {
                return pre
            }
        },[])
        console.log(newArr);  // ["a", "b", "c"]
    </script>

    (5)数组扁平化

    <script type="text/javascript">
        const arr = [1,[2,3,4,[5,6,7]],8];
        const newArr = (arr) => {
        return arr.reduce((pre, cur)=>{
            return pre.concat(Array.isArray(cur) ? newArr(cur) : cur) 
        },[])
        }
        console.log(newArr(arr));  // [1, 2, 3, 4, 5, 6, 7, 8]
    </script>
  • 相关阅读:
    ssh的配置[待写]
    回文检测题解
    叠积木/银河系英雄传说[NOI2002]题解
    酒店之王解题报告
    摆花解题报告
    摆渡车(noip2018 pj t3)
    NOIP2018 普及 凉凉记
    子矩阵(NOIP2014T4)
    花店橱窗布置(洛谷:P1854)
    我想大声告诉你
  • 原文地址:https://www.cnblogs.com/BAHG/p/15190049.html
Copyright © 2020-2023  润新知