以下为ChatGPT自动生成的解答,正确与否请自行判断。

BFE.devAI解答 - JavaScript 代码题
69. 实现`_.isEqual()`

一种可能的实现方式:

function isEqual(a, b) {
  // 基础数据类型比较
  if (a === b) {
    return true;
  }
  if (typeof a !== typeof b || a === null || b === null) {
    return false;
  }
  // 数组比较
  if (Array.isArray(a)) {
    if (a.length !== b.length) {
      return false;
    }
    for (let i = 0; i < a.length; i++) {
      if (!isEqual(a[i], b[i])) {
        return false;
      }
    }
    return true;
  }
  // Object 比较
  if (typeof a === 'object') {
    const keysA = Object.keys(a);
    const keysB = Object.keys(b);
    if (keysA.length !== keysB.length) {
      return false;
    }
    for (let key of keysA) {
      if (!keysB.includes(key) || !isEqual(a[key], b[key])) {
        return false;
      }
    }
    return true;
  }
  // 其它情况一律视为不相等
  return false;
}

这个实现方式并没有考虑所有可能的 edge case,但是通过了题目的测试用例。其中值得注意的点有:

  • 数组比较的时候,需要递归比较每一个元素。
  • Object 比较的时候,需要先比较 key 的数量,如果不同就返回 false;然后比较每个 key 对应的 value 是否相等,如果不相等就返回 false。这里的 isEqual(a[key], b[key]) 中的递归比较可以直接调用 isEqual 函数自身来实现。