码迷,mamicode.com
首页 > 其他好文 > 详细

深度比较isEqual

时间:2020-06-21 15:32:30      阅读:54      评论:0      收藏:0      [点我收藏+]

标签:func   seq   isequal   bsp   OLE   return   function   nbsp   col   

    // 是不是对象
    function isObject(obj) {
      return typeof obj === "object" || obj !== null;
    }
    // 深度比较
    function isEqual(obj1, obj2){
      if (!isObject(obj1) || !isObject(obj2)) {
        // 值类型,(注意,参与equal的一般不会是函数)
        return obj1 === obj2;
      }
      if (obj1 === obj2) {
        return true;
      }
      // 两个都是对象或数组,且不相等
      // 1、先取出obj1 和 obj2 的keys, 比较个数
      let obj1Keys = Object.keys(obj1);
      let obj2Keys = Object.keys(obj2);
      if (obj1Keys.length !== obj2Keys.length) {
        return false;
      }
      // 2、以obj1 为基准 和 obj2 依次递归比较
      for (let key in obj1) {
        // 比较当前 key 的 val -- 递归
        const res = isEqual(obj1[key], obj2[key]);
        if (!res) {
          return false;
        }
      }
      // 3、全相等
      return true;
    }
let obj1 = {
      a: 1,
      b: 2,
      c: {
        d: "d",
        e: e
      }
    }
    let obj2 = {
      a: 1,
      b: 2,
      c: {
        d: "d",
        e: e
      }
    }
    console.log(isEqual(obj1,obj2));

 

深度比较isEqual

标签:func   seq   isequal   bsp   OLE   return   function   nbsp   col   

原文地址:https://www.cnblogs.com/liangzhixiaolaohu/p/13172311.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!