Javascript - deepEqual Comparison

后端 未结 8 1285
囚心锁ツ
囚心锁ツ 2020-12-05 05:21

Question (From Eloquent Javascript 2nd Edition, Chapter 4, Exercise 4):

Write a function, deepEqual, that takes two values and returns true only if th

8条回答
  •  一生所求
    2020-12-05 05:43

    Although that it's more verbose, maybe this option is easier to read:

    function deepEqual(elem1, elem2) {
        if(elem1 === elem2) {
            return true;
        }
        if(typeof elem1 == 'object' && typeof elem2 == 'object' && elem1 != null && elem2 != null) {
          if(Object.keys(elem1).length == Object.keys(elem2).length) {
              for(let key of Object.keys(elem1)) {
                  if(elem2.hasOwnProperty(key) != true) {
                      return false;
                  }
              }
              for(let key of Object.keys(elem1)) {
                  if(typeof elem1[key] == 'object' && typeof elem2[key] == 'object' && typeof elem1[key] != null && typeof elem2[key] != null) {
                      return deepEqual(elem1[key], elem2[key]);
                  }
                  else {
                    if(elem1[key] !== elem2[key]) {
                        return false;
                    }
                  }
              } else {
                return false;
              }
            }
          }
        else {
            return false;
        }
        return true;
      }
    

提交回复
热议问题