[Easy] LeetCode JS 30 - 2626. Array Reduce Transformation (手寫原生陣列 reduce 方法)

2024年4月30日

💎 加入 E+ 成長計畫 與超過 400+ 位軟體工程師一同在社群中成長,並且獲得更多的軟體工程學習資源

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;
};
🧵 如果你想收到最即時的內容更新,可以在 FacebookInstagram 上追蹤我們