跳至主要内容

2626.Array Reduce Transformation

備註

為個人思考的思緒紀錄,可能有更優解法,歡迎指教討論共好

思考問題

  1. 不能使用 .reduce ,但要做出 .reduce 的效果
  2. reduce 就是陣列依 fn() 條件回傳出一個值(或物件)

列出步驟

  1. 宣告一個空值來放結果 (結果還是需要宣告一個變數來存放值)
  2. 看起來是用 init 去算的,如果 array is 0 就印出 init 跑 for 迴圈,遍歷陣列的每一個值
  3. val = fn(init, nums[i])
  4. val = fn(var, nums[i])

寫 pseudocode

  1. SET accumulator to init
  2. IF nums.length less than or equal to 0 return accumulator
  3. LOOP i ++ less than or equal to nums.length
  4. accumulator to fn(accumulator, nums[i])
  5. return accumulator

Solve

var reduce = function(nums, fn, init) {
let accumulator = init;
if (nums.length === 0) {
return init
}
for (let i = 0; i <= nums.length -1; i++ ) {
accumulator = fn(accumulator, nums[i])
}
return accumulator;
};

反思與優化

  • .reduce 有做過筆記,但很不熟
  • 我做了一個 gemini-cli 的 code coach ,他不會直接跟我說怎麼解決,而是會引導並且提示解決方式,像這樣: 『思考一下,你應該用哪一種宣告方式來建立一個你預期會改變的變數呢?』
  • 這裡 for 迴圈如果陣列是 [1, 2, 3 ] ,我寫成 i <= nums.length 會跑到 3 ,而正確的索引應該只到 2
  • 還有變數 constlet ,以及範圍的錯誤,顯示基礎不熟