深度比较isEqual

Posted liangzhixiaolaohu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度比较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));

 

以上是关于深度比较isEqual的主要内容,如果未能解决你的问题,请参考以下文章

isEqual

isEqual of NSManagedObject - 它如何确定相等性?

isEqual,isEqualTostring,==三者的区别

使用sequel来比较对象

我应该如何测试 BDD 中值对象类型的“isEqual”方法?

indexAtPosition、urlRequest.url!.isEqual 的 swift 3 等效项