deepEqual对比两个对象是否相等

168 阅读1分钟

deepEqual 是一种深度比较两个对象是否相等的函数。它不仅比较对象的值是否相同,还比较对象内部嵌套对象的值是否相同。以下是一个手写的deepEqual函数:

function deepEqual(obj1, obj2) {
    if (obj1 === obj2) return true; // 引用相同或值相同
​
    if (typeof obj1 !== 'object' || obj1 === null ||
        typeof obj2 !== 'object' || obj2 === null) {
        return false; // 不是对象或其中一个是null
    }
​
    let keys1 = Object.keys(obj1);
    let keys2 = Object.keys(obj2);
​
    if (keys1.length !== keys2.length) return false; // 键数量不同
​
    for (let key of keys1) {
        if (!keys2.includes(key) || !deepEqual(obj1[key], obj2[key])) {
            return false; // 键不同或值不同
        }
    }
​
    return true;
}
​
// 测试
console.log(deepEqual({a: 1, b: {c: 3}}, {a: 1, b: {c: 3}})); // true
console.log(deepEqual({a: 1, b: {c: 3}}, {a: 1, b: {c: 4}})); // false