可以使用递归来比较两个对象是否相等。首先判断两个对象的类型是否相等,如果不相等则返回false。然后判断两个对象的属性个数是否相等,如果不相等则返回false。接着递归比较两个对象的属性值是否相等。如果所有属性值都相等,则返回true,否则返回false。

下面是一个完美的方法示例:

function deepEqual(obj1, obj2) {
  // 判断类型是否相等
  if (typeof obj1 !== typeof obj2) {
    return false;
  }

  // 判断是否为对象
  if (typeof obj1 === 'object' && obj1 !== null && obj2 !== null) {
    // 判断属性个数是否相等
    if (Object.keys(obj1).length !== Object.keys(obj2).length) {
      return false;
    }

    for (let key in obj1) {
      // 递归比较属性值
      if (!deepEqual(obj1[key], obj2[key])) {
        return false;
      }
    }
    return true;
  }

  // 直接比较基本类型的值
  return obj1 === obj2;
}

使用示例:

const obj1 = { name: 'Alice', age: 20 };
const obj2 = { name: 'Alice', age: 20 };
console.log(deepEqual(obj1, obj2)); // true

const obj3 = { name: 'Bob', age: 30 };
const obj4 = { name: 'Alice', age: 20 };
console.log(deepEqual(obj3, obj4)); // false

这个方法可以递归比较对象的属性值,不使用JSON.stringify()可以避免一些特殊情况下的问题。

JavaScript 对象深度比较:无需 JSON.stringify() 的完美方法

原文地址: https://www.cveoy.top/t/topic/pgdQ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录