[代码实现] JS 中如何实现大对象深度对比【热度: 906】

关键词:JS对象对比

在JavaScript中,可以使用递归的方式实现大对象的深度对比。以下是一个示例函数,用于比较两个大对象的每个属性是否相等:

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: 'John',
  age: 30,
  address: {
    street: '123 Main St',
    city: 'New York'
  }
};

const obj2 = {
  name: 'John',
  age: 30,
  address: {
    street: '123 Main St',
    city: 'New York'
  }
};

const obj3 = {
  name: 'Jane',
  age: 25,
  address: {
    street: '456 Park Ave',
    city: 'Los Angeles'
  }
};

console.log(deepEqual(obj1, obj2)); // true
console.log(deepEqual(obj1, obj3)); // false

在上述示例中,deepEqual函数会递归比较两个对象的每个属性的值,包括嵌套的对象或数组。如果两个对象是相等的,则返回true,否则返回false。注意,该函数不会检查函数、正则表达式、日期等复杂类型的值。