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