前端每日一练:在 JavaScript 中,可以使用不同的方式来判断两个对象是否相等,取决于你的需求

本文讨论了JavaScript中浅相等(只比较引用)与深相等(递归比较值)的概念,介绍了如何使用内置库Lodash的isEqual方法以及自定义deepEqual函数进行对象比较,根据实际需求选择合适的相等判断方式。
摘要由CSDN通过智能技术生成
  1. 浅相等(Shallow Equality): 检查对象的引用是否相同。

    const obj1 = { a: 1, b: 2 };
    const obj2 = { a: 1, b: 2 };
    console.log(obj1 === obj2); // false,因为它们引用不同

  2. 深相等(Deep Equality): 检查对象的值是否相同,递归检查嵌套对象。

    • 使用库(如 Lodash): Lodash 提供了 isEqual 方法。

      const _ = require('lodash'); 
      const obj1 = { a: 1, b: { c: 2 } };
      const obj2 = { a: 1, b: { c: 2 } }; 
      console.log(_.isEqual(obj1, obj2)); // true

    • 自定义递归比较: 自己实现递归比较对象的属性。

       function deepEqual(obj1, obj2) {
                  if (obj1 === obj2) return true;
                  if (typeof obj1 !== 'object' || obj1 === null || typeof obj2 !== 'object' || obj2 === null) {
                      return false;
                  }
                  // 获取对象的所有属性,包括可枚举和不可枚举的
                  const keys1 = Reflect.ownKeys(obj1);
                  const keys2 = Reflect.ownKeys(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;
              }
      // 示例使用:
      const obj1 = { a: 1, b: { c: 2 } };
      const obj2 = { a: 1, b: { c: 2 } };
      const obj3 = { a: 1, b: { c: 3 } };
      
      console.log(deepEqual(obj1, obj2)); // true
      console.log(deepEqual(obj1, obj3)); // false

选择哪种方式取决于你对相等的定义,如果仅仅关心引用相等,则使用浅相等;如果需要比较对象的结构和值,则使用深相等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值