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