この解答例はChatGPTによって生成されています,正しいかは自己判断で。 皆の投稿からも解答例が見つかるかもしれませんよ。
BFE.devでのAI解答例 - JavaScript コーディング問題
122. memoizeOne() を実装する
以下はJavaScriptのmemoizeOne()関数の実装例です。
function memoizeOne(func, isEqual = defaultIsEqual) { let lastArgs = null; let lastResult = null; function memoized(...newArgs) { if (!isEqual(lastArgs, newArgs)) { // 引数が前回と異なる場合、結果を再計算する lastResult = func(...newArgs); } lastArgs = newArgs; // 同じ引数が与えられた場合はキャッシュされた結果を返す return lastResult; } return memoized;}function defaultIsEqual(prevArgs, newArgs) { if (prevArgs === null) { return false; } if (prevArgs.length !== newArgs.length) { return false; } for (let i = 0; i < prevArgs.length; i++) { if (prevArgs[i] !== newArgs[i]) { return false; } } return true;}
この関数は、与えられた関数と引数の等価性を比較するためのequal関数(デフォルトは上記のdefaultIsEqual関数)を使用して、戻り値をキャッシュしています。
もし、引数が前回と違う場合には、結果を再計算することで、関数の再呼び出しを避けています。isEqual関数がnullか未定義の場合、配列の要素に対してstrict equal ===
で比較するデフォルトのequal関数が使用されます。