以下为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 函数自身来实现。