2626.Array Reduce Transformation
備註
為個人思考的思緒紀錄,可能有更優解法,歡迎指教討論共好
思考問題
- 不能使用
.reduce
,但要做出.reduce
的效果 - reduce 就是陣列依 fn() 條件回傳出一個值(或物件)
列出步驟
宣告一個空值來放結果(結果還是需要宣告一個變數來存放值)- 看起來是用 init 去算的,如果 array is 0 就印出 init 跑 for 迴圈,遍歷陣列的每一個值
val = fn(init, nums[i])
val = fn(var, nums[i])
寫 pseudocode
- SET accumulator to init
- IF nums.length less than or equal to 0 return accumulator
- LOOP i ++ less than or equal to nums.length
- accumulator to fn(accumulator, nums[i])
- 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 - 還有變數
const
跟let
,以及範圍的錯誤,顯示基礎不熟