この解答例は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関数が使用されます。