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