[Easy] LeetCode JS 30 - 2626. Array Reduce Transformation (手寫原生陣列 reduce 方法)
2024年4月30日
💎 加入 E+ 成長計畫 與超過 500+ 位軟體工程師一同在社群中成長,並且獲得更多的軟體工程學習資源
LeetCode 30 Days of JavaScript
本題來自 LeetCode 的 30 天 JacaScript 挑戰
2626. Array Reduce Transformation (手寫原生陣列 reduce 方法)題目描述
給定一個整數陣列 nums
、一個縮減函式 fn
和一個初始值 init
,請實作 reduce
函式,該函式會依序對陣列中的每個元素執行 fn
函式,並將前一個執行的返回值,當作下一次執行的輸入。
具體來說會這樣:val = fn(init, nums[0]), val = fn(val, nums[1]), val = fn(val, nums[2]), ...
,直到陣列中的所有元素都被處理完畢,最後返回 val
的最終值。
如果陣列長度為 0,則函數應返回 init
。
請不要用 JavaScript 內建的 Array.reduce
方法解決此問題。
// 範例一
輸入:
nums = [1,2,3,4]
fn = function sum(accum, curr) { return accum + curr; }
init = 0
輸出: 10
解說:
最開始的值 init=0.
(0) + nums[0] = 1
(1) + nums[1] = 3
(3) + nums[2] = 6
(6) + nums[3] = 10
所以最後會是 10.
// 範例二
輸入:
nums = [1,2,3,4]
fn = function sum(accum, curr) { return accum + curr * curr; }
init = 100
輸出: 130
解說:
最開始的值 init=100.
(100) + nums[0] * nums[0] = 101
(101) + nums[1] * nums[1] = 105
(105) + nums[2] * nums[2] = 114
(114) + nums[3] * nums[3] = 130
所以最後會是 130.
本題解答
以下是本題的解答,詳細解題思路可以在 E+ 成長計畫 看到。如果想練習更多題目,推薦可以到 GreatFrontEnd 上練習。
解法
var reduce = function (nums, fn, init) {
let value = init;
for (const num of nums) {
value = fn(value, num);
}
return value;
};