簡體   English   中英

Javascript中的reduce函數

[英]A reduce function in Javascript

我正在使用Marijn Haverbeke的書Eloquent JavaScript學習Javascript,但不理解以下示例:

function reduce(combine, base, array) {
    forEach(array, function (element) {
        base = combine(base, element);
    });
    return base;
}

function add(a, b) {
    return a + b;
}

function sum(numbers) {
    return reduce(add, 0, numbers);
}

他在書中前面介紹了forEach函數,如下所示:

function forEach(array, action) {
    for(var i = 0; i < array.length; i++)
        action(array[i]);
}

現在,回到reduce函數,我不明白的原因是為什么在sum函數中將0傳遞為reduce base 那不是很奇怪嗎? 假設我嘗試運行sum([1,2,3]) ...在它的第一個循環中看起來不是0 = add(0,1)嗎? 我不明白

加完后,僅將總和作為base 因此,它在每個循環中都遞增。

base = combine(base, element)

該語句首先計算combine(base, element)並將其分配給base 它不比較0add(0, 1) 因此對於下一次迭代, base將具有所有先前值的總和。

EDITED

假設您調用reduce(combine, 0, [10, 22, 7, 5]) 循環將被迭代為

Iteration           base          element
1                   0             10

在計算add(base, element)base設置為10。因此對於下一次迭代,其值為10。

1                   10            22

在計算add(base, element)base設置為32。因此對於下一次迭代,其值為32。

1                   32            7

在計算add(base, element)base設置為39。因此對於下一次迭代,其值為39。

1                   39            5

在計算add(base, element)base設置為44。由於沒有更多元素了,答案是44。

base是將包含所有元素之和的變量。 通常以0開頭。

不是:0 = add(0,1)

而是:base將包含base和1的先前值的總和

還要記住,等號右側的內容將首先進行評估。 所以,

base = combine(base, element)

正在獲取combine(base, element)的結果並將其分配給變量base (現在將覆蓋先前分配給的base )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM