/**
 * 深度判断两个对象是否一样
 * @param {Object} object1 对象1
 * @param {Object} object2 对象2
 */
const deepEqualObject = (object1 = {}, object2 = {}) => {

    // 如果两个对象引用相同,则返回 true
    if (object1 === object2) return true;

    // 如果两个对象中至少有一个不是对象,则返回 false
    if (typeof object1 !== 'object' || typeof object2 !== 'object') return false;

    // 获取两个对象的所有属性名
    const keys1 = Object.keys(object1);
    const keys2 = Object.keys(object2);

    // 如果两个对象的属性数量不相同,则返回 false
    if (keys1.length !== keys2.length) return false;

    // 递归比较两个对象的每个属性值
    // 如果 obj2 不包含 obj1 的某个属性,或者属性值不相等,则返回 false
    for (let key of keys1) if (!object2.hasOwnProperty(key) || !deepEqualObject(object1[key], object2[key])) return false;

    // 如果所有属性值都相同,则返回 true
    return true;
}

文章作者: CaptainTwo
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 CaptainTwo
JavaScript NodeJs JavaScript NodeJs
喜欢就支持一下吧