第一個就從這題開始啦,題目如下
Given a function fn, return a memoized version of that function.
A memoized function is a function that will never be called twice with the same inputs. Instead it will return a cached value.
先附上我的解法,雖然不是最佳解。
function memoize(fn) {
let result=new Map();
return function(...args) {
let arg=JSON.stringify([...args])
let value=result.get(arg) //如果找不到的話會是undefined
if(value===undefined){
value= fn(...args);
result.set(arg,value)
}
return value;
}
}
這題其實不難,也可以用Object解,不過這邊選擇用Map解,兩種方法思路上基本上是差不多的,如果找不到存下來的參數的話,就把參數跟結果記下來,後續呼叫時如果一樣的參數的話就回傳結果,不然就重新呼叫function。
之前的解法還可以在簡潔一點,提早return掉,像下面這樣。
function memoize(fn) {
let result=new Map();
return function(...args) {
const arg=JSON.stringify(args)
if(result.has(arg)){
return result.get(arg)
}
const value=fn(...args);
result.set(arg,value)
return value;
}
}