4.手写深度比较,模拟lodash.isEqual

这篇博客探讨了如何实现一个深度比较函数,模拟lodash库中的isEqual方法,用于判断两个对象或数组是否在值上完全相等。文章通过提供测试用例和代码实现,详细解释了如何处理值类型、对象和数组的深度比较,确保在忽略引用的情况下比较它们的内容是否一致。
摘要由CSDN通过智能技术生成

4.手写深度比较,模拟lodash.isEqual(),实现深度全等判断
测试用例:判断obj1和obj2是否相等
// 测试

const obj1 = {
    a: 100,
    b: {
        x: 100,
        y: 200
    }
};
const obj2 = {
    a: 100,
    b: {
        x: 100,
        y: 200
    }
};
//要先判断是不是对象或数组
function isObject(obj) {
    return typeof obj === 'object' && obj !== null;
};
//全相等 注意参与equal的不会是函数
function isEqual(obj1, obj2) {
    //1.值类型 先考虑不是对象的情况 如果obj1或obj2有一个不是对象或数组 那么是值类型 直接返回比较结果
    if (!isObject(obj1) || !isObject(obj2)) {
        return obj1 === obj2;
    };
    if (obj1 === obj2) {
        return true;
    };
    //到这就是两个都是对象或者数组 而且不相等 进行深度比较
    //1.先判断数组的key的个数是不是相等
    const obj1keys = Object.keys(obj1);
    const obj2keys = Object.keys(obj2);
    if (obj1keys.length !== obj2keys.length) {
        return false;
    };
    //2.以obj1为基准,和obj2依次递归比较  递归要遍历!!! 即使用值类型又适用于对象
    for (let key in obj1) {
        //比较当前key的value
        const res = isEqual(obj1[key], obj2[key]);
        if (!res) {  //如果结果不相等
            return false;
        };
    }
    //3.全相等
    return true;  //就是地址不相等 但是对象里面的内容全等
}
// 测试
const obj1 = {
    a: 100,
    b: {
        x: 100,
        y: 200
    }
};
const obj2 = {
    a: 100,
    b: {
        x: 100,
        y: 200
    }
};
 console.log(isEqual(obj1, obj2));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码不停蹄~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值