zoukankan      html  css  js  c++  java
  • 判断两个值是否相等(原始值和数组,对象类型)

    // 判断两个值是否相等
    export default function isEqual(obj1, obj2) {
      const obj1Type = checkType(obj1);
      const obj2Type = checkType(obj2);
      // 首先判断是否类型相同
      if (obj1Type !== obj2Type) {
        return false;
      }
      if (obj1Type === "array") {  // 注意: 数组需要考虑顺序,如果顺序不同,数组不同
        if (obj1.length !== obj2.length) {
          return false;
        } else { // 注意: 需要考虑多维数组和数组的项是对象类型等
          return obj1.every((item,index) => isEqual(item, obj2[index]));
        }
      } 
      if (obj1Type === "object") { // 对象本身无序,不需要考虑顺序
        const obj1Keys = Object.keys(obj1);
        const obj2Keys = Object.keys(obj2);
        if (obj1Keys.length !== obj2Keys.length) {
          return false;
        } else { // 注意:需要考虑对象嵌套情况
          const newSetObj2Keys = new Set(obj2Keys)
          for (let i in obj1) {
            if (obj1.hasOwnProperty(i)) {
              if (!newSetObj2Keys.has(i)) return false;
              if (!isEqual(obj1[i], obj2[i])) return false;
            }    
          }
          return true;
        }
      }
      return Object.is(obj1, obj2);
    }
    
    export function checkType(data) {
      return Object.prototype.toString.call(data).toLowerCase().slice(8, -1);
    }
  • 相关阅读:
    Java -verbose:gc 命令
    JVM中启用逃逸分析
    nginx指定配制文件
    jvm笔记
    python添加tab键提示
    ssh-copy-id帮你建立信任
    救火必备linux命令
    oracle判断字符串中包函另外一个字符串
    String,StringBuffer,StringBuilder三者区别
    Python数据分析应用背景
  • 原文地址:https://www.cnblogs.com/lyraLee/p/10472500.html
Copyright © 2011-2022 走看看