• 对reduce理解,以及几种常见的应用场景


    一、概念

    reduce会对数组进行遍历,回调函数的两个值分别表示,逻辑操作的累积结果以及当前值,常用于对数组等进行累加。

    reduce函数语法

    arr.reduce(function (previousValue, currentValue) {
    /* 逻辑函数 */
    }, initialValue)
    arr:表示对某个数组进行遍历
    previousValue:对数组的累加结果,需要在函数体中return
    currentValue:arr数组的当前遍历项
    initialValue:表示起始值,选填,不填的话,previousValue为数组第一项,currentValue为数组第二项;填的话,previousValue为initialValue,currentValue为数组第一项。

    二、常见的几种应用场景

    ①、对数组累加求和

      let arr = [1, 2, 3, 4, 5, 6]
            var sum = 0
            sum = arr.reduce(function (sum, cur) {
                sum += cur
                return sum
            }, 0)
            console.log(sum)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    ②、对象数组中的数值之和

    let arr2 = [{
                    subject: '数学',
                    marks: 78
                },
                {
                    subject: '物理',
                    marks: 80
                },
                {
                    subject: '化学',
                    marks: 93
                }
            ]
            let sum = 0
            sum = arr2.reduce(function (sum, cur) {
                sum += cur.marks
                return sum
            }, 0)
            console.log('分数之和是', sum)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    ③、展平数组(将多维数组转换为一维)

     let arr3 = [ [1,2], [3,4], [5,6], [7,8] , [9,10] ];
            let sum = []
            sum = arr3.reduce(function(sum,arr){
                // sum.push(...arr)两种都可以
                sum = sum.concat(arr)
                return sum
            },[])
            console.log(sum)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    ④、按属性分组对象(分数大于等于50分的为通过,低于50分的为不通过)

    let arr3 = [{
                    subject: '物理',
                    marks: 41
                },
                {
                    subject: '化学',
                    marks: 59
                },
                {
                    subject: '高等数学',
                    marks: 36
                },
                {
                    subject: '应用数学',
                    marks: 90
                },
                {
                    subject: '英语',
                    marks: 64
                },
            ];
            let obj = {
                pass: [],
                fail: []
            }
            obj = arr3.reduce(function (obj, cur) {
                cur.marks >= 50 ? obj.pass.push(cur) : obj.fail.push(cur)
                return obj
            }, obj)
            console.log(obj)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    ⑤、假设集合A={a, b},集合B={0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。求当A={a, b, …, n}, B={0, 1, 2, …, n}时的笛卡尔积.

      let arr = [
                [{
                    a: 1,
                    b: 2
                }, 'c'],
                [1, 2, 3],
                [7, 8, 9]
            ]
            let arrs
    
            arr.reduce(function (sum, cur) {
                console.log(sum, 'sum-----')
                console.log(cur, 'cur-----')
                arrs = []
                for (var i = 0; i < sum.length; i++) {
                    for (var j = 0; j < cur.length; j++) {
                        let temparr = []
                        console.log(Array.isArray(sum[i]))
                        Array.isArray(sum[i]) ? temparr = temparr.concat(sum[i]) : temparr.push(sum[i])
                        temparr.push(cur[j])
                        arrs.push(temparr)
                    }
                }
                return arrs
            })
            console.log(arrs,'arrs------------')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
  • 相关阅读:
    websocket通信
    【FPGA教程案例51】控制案例3——基于FPGA的PWM波形产生verilog实现
    图像处理解决方案 veImageX 技术演进之路
    Vue2 零基础入门 Vue2 零基础入门第三天 3.4 vue组件
    要学很多数学吗 - 给要入行机器学习的朋友们的建议
    多条件分页查询
    sonic-ios-bridge(sib)性能监控
    mybatis1
    windows Vscode 连接 虚拟机,超详细,含免密免ip配置 以 linux 虚拟机为例
    【Aseprite】制作Unity2D瓦片地图素材(平台游戏)
  • 原文地址:https://blog.csdn.net/qq_45791799/article/details/125426273