对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)

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

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)

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

 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)

④、按属性分组对象(分数大于等于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)

⑤、假设集合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------------')

猜你喜欢

转载自blog.csdn.net/qq_45791799/article/details/125426273