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);
    }
  • 相关阅读:
    第二次作业。。
    第一次随笔作业
    第一次作业
    第4次随笔
    第3次随笔
    第2次作业
    第一次随笔
    我的第一次随笔
    iforums
    第四次作业
  • 原文地址:https://www.cnblogs.com/lyraLee/p/10472500.html
Copyright © 2011-2022 走看看