深度比较isEqual

    // 是不是对象
    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));

猜你喜欢

转载自www.cnblogs.com/liangzhixiaolaohu/p/13172311.html