1. 程式人生 > 其它 >實現Array.proptotype.reduce--簡易版

實現Array.proptotype.reduce--簡易版

技術標籤:jsjs

首先,分析原有的Array.prototype.reduce
reduce是一種歸併方法,對每一項都會執行一個歸併方法(計算陣列之和可以使用)
引數:

reduce(callback[,initialVlaue])

其中:
callback: 陣列中每個元素執行操作的方法,必選
initialValue:初始值,可選

操作函式:callback(prev,cur[,index,arr])
prev: 前面操作的結果,有initialVlaue的時候,開始執行的時候prev=initialValue;沒有initialValue的時候,prev = 陣列的第0項
cur: 當前陣列遍歷到的值

index: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;
}