如何手動實現reduce 方法函式

2022-09-06 11:51:27 字數 2145 閱讀 6183

與map()的實現 ,filter()的實現中的迭代方法不一樣,reduce() 是歸併方法。

reduce 接收兩個引數:

第二個可選引數是作為歸併基礎的初始值

reduce 方法返回乙個最終的值。

**表示:

arr.reduce(function(prev, cur, index, arr){}, initialvalue)

與之前的迭代不同,歸併不是對每一項都執行目標函式,而是可以概括為如下兩步:

對陣列 [1,2,3] 歸併執行(prev, cur) => prev + cur,流程如圖:

[1, 2, 3] //

取出 1 + 2 ,填回 3

[3, 3] //

取出 3 + 3 ,填回 6

[6] //

最終結果為 6

所以得到 6 。

根據這個思路,得到第一版**如下

//

第一版array.prototype.fakereduce = function

fakereduce(fn, base)

index += 1;

let result = fn.call(null, arr[0], arr[1], index, initialarr);

return

result;

};

注意點:

佇列方法 unshift()

splice() 方法,高程三將其譽為最強大的陣列方法

插入任意數量的項

替換,即刪除任意數量的項的同時,插入任意數量的項

返回值影響原陣列

從上面的總結可以看出,splice()方法完全可以取代unshift()方法。

而且,第一版中存在一些重複**,也可以改進。

由此得到第二版**

//

第二版array.prototype.fakereduce = function

fakereduce(fn, base)

return

newvalue;

};

檢測:

let arr = [1, 2, 3, 4, 5];

let sum = arr.fakereduce((prev, cur, index, arr) =>, 100);

console.log(sum);

輸出:

100 1 0 [ 1, 2, 3, 4, 5]

100 2 1 [ 1, 2, 3, 4, 5]

200 3 2 [ 1, 2, 3, 4, 5]

600 4 3 [ 1, 2, 3, 4, 5]

2400 5 4 [ 1, 2, 3, 4, 5]

12000

最後加上型別檢測等

//

第三版array.prototype.fakereduce = function

fakereduce(fn, base)

let initialarr = this

; let arr =initialarr.concat();

if(base) arr.unshift(base);

let index, newvalue;

while (arr.length > 1)

return

newvalue;

};

const reducehelper = (f, acc, arr) =>

array.prototype.fakereduce = function

(fn, initialvalue)

支援 cb 函式的全部引數

const reducehelper = (fn, acc, idx, array) =>

array.prototype.myreduce = function

(cb, initialvalue)

array.prototype.myreduce = function

(cb, initialvalue)

return

acc}

手動實現reduce方法和splice方法

今天花了一點時間手寫了比較常用的一些方法的原始碼,其中,reduce和splice這兩個方法比別的略微複雜點,就分享一下啦 splice stratindex,delcount,ele1,ele2.該方法表示從startindex下標開始,刪除delcount個陣列元素,然後在startindex處...

如何手動實現死鎖

此篇 說明 在main方法中,例項化了兩個實現了runnable介面的deadlocktest物件test1和test2,test1的flag等於1,所以在thread1執行緒執行的時候執行的是run 方法後半部分的 test2的flag等於2,所以在thread2執行緒啟動的時候執行的是run 方...

reduce 方法實現 webpack 多檔案入口

這篇日誌,在開始接觸 webpack 時候就該寫了,現在發布也許對一些剛入此坑的童鞋能些許幫助。即使有點 low,重要的仍是分享 reduce 函式的設計意圖就是方便進行疊加運算 var arr 0,1,2,3 reduce 實現累加 var total arr.reduce function pr...