Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
yanlele opened this issue Sep 6, 2023 · 0 comments
Open
Labels
代码实现/算法 代码实现或者算法实现 百度 公司标签
Milestone

Comments

@yanlele
Copy link
Member

yanlele commented Sep 6, 2023

关键词: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。注意,该函数不会检查函数、正则表达式、日期等复杂类型的值。

@yanlele yanlele added web应用场景 应用场景类问题 百度 公司标签 labels Sep 6, 2023
@yanlele yanlele added this to the milestone Sep 6, 2023
@yanlele yanlele added 代码实现/算法 代码实现或者算法实现 JavaScript JavaScript 语法部分 and removed JavaScript JavaScript 语法部分 web应用场景 应用场景类问题 labels Sep 6, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
代码实现/算法 代码实现或者算法实现 百度 公司标签
Projects
None yet
Development

No branches or pull requests

1 participant