この解答例はChatGPTによって生成されています,正しいかは自己判断で。

BFE.devでのAI解答例 - JavaScript コーディング問題
69. `_.isEqual()`を実装する

以下が実装例です。

function isEqual(a, b) {
  // primitivesの場合は簡単に比較できる
  if (typeof a !== 'object' || typeof b !== 'object' || a === null || b === null) {
    return a === b;
  }
  // 長さが違うarrayの場合は異なるものとする
  if (Array.isArray(a) !== Array.isArray(b) || a.length !== b.length) {
    return false;
  }
  // 再帰的に属性を比較する
  const keysA = Object.keys(a);
  for (let i = 0; i < keysA.length; i++) {
    const key = keysA[i];
    if (!(key in b) || !isEqual(a[key], b[key])) {
      return false;
    }
  }
  const keysB = Object.keys(b);
  for (let i = 0; i < keysB.length; i++) {
    const key = keysB[i];
    if (!(key in a)) {
      return false;
    }
  }
  return true;
}

この実装では、まずprimitivesの場合は単純に比較します。次に、arrayであれば、長さが違う場合は異なるものとしています。objectの場合は、再帰的に属性を比較します。一方のobjectにはある属性が、もう一方にあっていない場合、または属性の値が異なる場合は異なるものとしています。最後に、両方のobjectにあって、属性の値がすべて同じである場合は同じものとしてtrueを返します。