Reduce といくつかの一般的なアプリケーション シナリオについての理解

1. コンセプト

reduce は配列を走査し、コールバック関数の 2 つの値はそれぞれ論理演算の累積結果と現在の値を表し、配列などを累積するためによく使用されます。

関数の構文を減らす

arr.reduce(function (previousValue, currentValue) { /*logical function */ },initialValue) arr: 配列を走査することを意味しますpreviousValue: 配列の累積結果を関数本体で返す必要がありますcurrentValue: 現在の値arr 配列トラバーサル項目のInitialValue: 初期値を示します。省略可能です。入力されていない場合、previousValue は配列の最初の項目、currentValue は配列の 2 番目の項目です。入力されている場合、previousValue は初期値、currentValue は配列の最初の項目です。配列。





2. いくつかの一般的なアプリケーション シナリオ

①. 配列を累積して合計する

  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} とすると、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