配列のreduce方法


この文章は配列reduceの使い方、三つのよくある使用と自分で実現するreduce紹介を紹介します.
1.reduceの使い方
菜鳥教程:
reduce()メソッドは、アキュムレータとして関数を受信し、配列内の各値(左から右へ)は縮小され、最終的には1つの値として計算される.
reduce()は関数のcomposeとして高次関数として利用できる.
注意:reduce()は、空の配列に対しては、コールバック関数を実行しません.
構文:
array.reduce(function(total,current Value,current Index,arr),initial Value)
2.reduceの使用例
文字だけではわかりにくいかもしれませんが、いくつかの場面を紹介します.
①配列の和
    const arr=[1,2,3,4,5,6]
    const sum=arr.reduce(
    (prev,item)=>prev+item,//     ,          
    0//       prev    
    )
上記のコードでは、itemはそれぞれ 配列要素であり、第1の実行時にはprev=0;第二の実行時、prevの値は前回実行した戻り値で、prev+itemが終了するまで 、最終結果を返します.0+arr[1]+arr[2]...が計算したコールバック関数に相当します.行列の中で4より大きい要素の和を求めるなど、必要な論理判断を書き込みます.判断文を加えるだけでいいです.
const sum=arr.reduce(
(prev,item)=>item>4?prev+item:prev,
0
)
②配列デレーティングは、配列デレーティングに使用できます.
        const arr = [1, 2, 3, 4, 5, 1, 1, 5, {}, {}, null, null, NaN, NaN]
        const arr2 = arr.reduce((init, item) => {
            init.includes(item) ? null : init.push(item)
            return init;
        }, [])
        console.log(arr, arr2);
1つの空配列initを初期値として、空配列initが巡回中の要素を含むかどうかを判定し、存在する場合は操作を行わず、存在しない場合はinit配列に要素を挿入し、最後にinit配列に戻る.includesの方式では空のオブジェクトは重くなりません.③フレームにvueで解析したいページの中の{person.friend.name}を使用します.
//  data
        const data = {
            person: {
                friend: {
                    name: 'forceddd'
                }
            }
        }
        //     
        const str = 'person.friend.name'
        const res = str.split('.').reduce(
            (data, key) => data[key],
            data
        )
        console.log(res);//'forceddd'
vueはまず文字列person.friend.nameを取得して、splitを通じて配列に変換して、reduce方法を利用してdataの中の値を取りやすくなりました.data[person][friend][name]に相当します.
3.レデュースの実現
    Array.prototype.myReduce = function (cb, init = 0) {
            if (typeof cb !== 'function') {
                throw new Error('          ')
            }
            if (!this.length) {
                throw new Error('        ')
            }
            for (let i = 0; i < this.length; i++) {
                //    ,                 init  
                init = cb(init, this[i], i, this);
            }
            //           init
            return init;
        }
以上は個人のためだけに理解して、もし間違いがあれば、ご指摘を歓迎します.
何かお役に立てることがあれば、何かいいものを注文してください.