簡體   English   中英

有人能解釋一下“forEach”方法在下面的代碼中是如何工作的嗎?

[英]Can someone explain how the “forEach” method works in the code below?

對於這個問題,我的任務是創建一個模仿 reduce 方法的 function 並針對以下內容進行測試,我應該得到 8 的答案。

我不明白回調(acc、el、index、arr)部分如何引入“add”function。 對於 (a, b) 的 2 個參數,forEach 的參數在哪里發揮作用?

 // function to mimic reduce
    function reduce(array, callback, initial) {
        if(Array.isArray(array) {
            let acc;
        if (initial === undefined) {
            acc = array[0];
            array = array.slice(1);
            } else {
            acc = initial;
            }
            array.forEach(function(el, index, arr) {
                acc = callback(acc, el, index, arr);
            });
            return acc;
        }
        return "The first arg should be an array";
    }


    // Code to test against reduce function
    var nums = [4, 1, 3]
    var add = function(a, b) { return a + b;}


reduce(nums, add, 0) // answer is 8

你打電話時

reduce(nums, add, 0);

nums成為array的值, add成為callback的值, 0成為initial的值。

然后,當您調用array.forEach()時,您的 function 執行acc = callback(acc, el, index, arr) ,它調用add() add()中, a獲取acc的值, b獲取el的值(傳遞給callback的另外兩個 arguments 被add忽略 - 大多數歸約函數不需要使用它們,但它們已通過為了完整性)。 結果存儲回acc中,將在forEach()的下一次迭代中再次傳遞。

順便說一句,初始化acc的代碼看起來不正確。 您不應該測試arr是否是一個數組(它必須是),您應該檢查是否提供了initial

var acc;
if (initial === undefined) {
    acc = arr[0];
    arr = arr.slice(1);
} else {
    acc = initial;
}

暫無
暫無

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

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