實現Array.proptotype.reduce--簡易版
阿新 • • 發佈:2021-01-21
首先,分析原有的Array.prototype.reduce
reduce是一種歸併方法,對每一項都會執行一個歸併方法(計算陣列之和可以使用)
引數:
reduce(callback[,initialVlaue])
其中:
callback
: 陣列中每個元素執行操作的方法,必選
initialValue
:初始值,可選
操作函式:callback(prev,cur[,index,arr])
prev: 前面操作的結果,有initialVlaue的時候,開始執行的時候prev=initialValue;沒有initialValue的時候,prev = 陣列的第0項
cur: 當前陣列遍歷到的值
arr:遍歷的資料
最終實現版
// 判斷數值型別 const type = (x) => { return Object.prototype.toString.call(x).slice(8,-1); } Array.prototype.doReduce = function(callback/*,initialValue*/) { // 執行操作的函式 let fn = callback; if (typeof fn !== 'function') { throw new TypeError(`${fn} is not a function`); } // 判斷呼叫的物件是否為arr const callObject = this; let callType = type(callObject); if (callType !== 'Array') { throw new TypeError(`${callType} is undefined`); } let res = null; let k = 0; let len = callObject.length; initialValue = arguments.length >= 0 ? arguments[1] : callObject[k++]; res = initialValue; // 下面處理函式 for (; k < len; k++) { res = fn(res, callObject[i], k, callObject); } return res; }