[英]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.