JS 实现大对象深度对比

大对象的特征

复杂性

大对象一般包含多个嵌套层级,可能包括数组、对象、函数等。

性能影响

如果对象过于庞大,可能会对性能产生负面影响,例如响应速度变慢、内存占用增加等。

状态管理

在现代前端框架(如 React、Vue)中,常常需要管理应用的状态,这时大对象就显得尤为重要。

数据结构

大对象的数据结构可以多种多样,以下是一些常见的示例:

const largeObject = {
    user: {
        id: 123,
        name: "Alice",
        preferences: {
            theme: "dark",
            language: "en"
        }
    },
    posts: [
        { id: 1, title: "Post 1", content: "Content of post 1" },
        { id: 2, title: "Post 2", content: "Content of post 2" }
    ],
    settings: {
        notifications: true,
        privacy: {
            publicProfile: false
        }
    }
};
const userList = [
    { id: 1, name: "Alice" },
    { id: 2, name: "Bob" },
    { id: 3, name: "Charlie" }
];

实现代码

function deepEqual(obj1, obj2) {
  let type1 = Object.prototype.toString.call(obj1)
  let type2 = Object.prototype.toString.call(obj2)
  if(type1 === type2) {
    if(type1 === '[object Object]') {
      // obj1 obj2 都为对象
      if(Object.keys(obj1).length === Object.keys(obj2).length) {
        for(let key in obj1) {
          if(!deepEqual(obj1[key], obj2[key])) return false
        }
        return true
      } else return false
    } else if(type1 === '[object Array]') {
      // obj1 obj2 都为数组
      if(obj1.length === obj2.length) {
        for(let i = 0; i < obj1.length; i++) {
          if(!deepEqual(obj1[i], obj2[i])) return false
        }
        return true
      } else return false
    } else {
      // 都为简单类型,直接判断
      if(obj1 !== obj2) return false
      return true
    }
  } else return false
}

运行测试

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: 'New York'
  }
};
deepEqual(obj1, obj2) // true
deepEqual(obj1, obj3) // false
const array1 = [
  { id: 1, name: "Alice" },
  { id: 2, name: "Bob" },
  { id: 3, name: "Charlie" }
];
const array2 = [
  { id: 1, name: "Alice" },
  { id: 2, name: "Bob" },
  { id: 3, name: "Charlie" }
];
const array3 = [
  { id: 1, name: "Jenny" },
  { id: 2, name: "lay" },
  { id: 3, name: "Charlie" }
];
deepEqual(array1, array2) // true
deepEqual(array1, array3) // false
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值