手写深度比较isEqual


// 深度比较

const obj1 = {
  a: 100,
  b: {
    x: 10,
    y: 20
  }
}

const obj2 = {
  a: 100,
  b: {
    x: 10,
    y: 20
  }
}

console.log(obj1 === obj2) // 直接比较是false
console.log(isEqual(obj1,obj2)) // true

function isEqual(obj1,obj2) {
  // 先判断是否是对象或者数组,不是的话直接进行比较
  if (!isObject(obj1) || !isObject(obj2)) {
    return obj1 === obj2
  }
  // 是对象或者数组,比较长度是否相同,不相同直接返回false
  const obj1keys = Object.keys(obj1);
  const obj2keys = Object.keys(obj2);
  if (obj1keys.length !== obj2keys.length) {
    return false;
  }
  // 比较是否全相等,for in 适用于对象和数组
  for (let key in obj1) {
    // 递归来比较是否完全相等
    const res = isEqual(obj1[key],obj2[key])
    // 某一次不相等就返回false,不用再比较
    if (!res) {
      return false;
    }
  }
  // 全相等返回true
  return true;

}

function isObject(obj) {
  return typeof obj === 'object' && obj !== null
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容