首页 科技正文

金华招聘网:判断两个工具的内容是否相等

admin 科技 2020-09-09 144 3

由于在做键盘导航组件的项目时,有这样一个需求,当用户传入按键字母和网址的映射时,若是和 localStorage 中的不一样那么就用 localStorage 中存储的,这个时刻就需要对照两个工具的内容是否相等,但是在 JS 中工具是一种引用类型.

obj1 = {
  a: 1
}
obj2 = {
  a: 1
}
console.log(obj1 === obj2) // false

纵然两个工具的内容完全相同,由于它们的地址差别,因此 obj1 === obj2 会返回 fasle。

以是自己凭据深拷贝时递归的头脑写了一个对照两个工具之间内容是否相同的函数。

function compareObject (obj1, obj2) {
  // 递归终止条件,当 obj1 或 obj2 不是工具时,此时就可以举行判断了
  if (typeof obj1 !== 'object' || typeof obj2 !== 'object') {
    if (obj1 === obj2) {
      return true
    } else if (obj1 !== obj2) {
      return false
    }
  }
  // 获取工具的自由属性组成的数组
  const obj1PropsArr = Object.getOwnPropertyNames(obj1)
  const obj2PropsArr = Object.getOwnPropertyNames(obj2) 
  // 若是数组的长度不相等,那么说明工具属性的个数都差别,返回 false
  if (obj1PropsArr.length !== obj2PropsArr.length) {
    return false
  }
  // 纪录当前 compareObject 的返回值,默认是 true
  let status = true
  for (key of obj1PropsArr) {
    status = compareObject(obj1[key], obj2[key])
    // 要害代码,当 status 为 false 时下面就不用再举行判断了,说明两个工具的内容并不相同
    // 若是没有下面这条语句,那么只要工具底层的内容是相同的那么就返回 true
    if (!status) {
      break
    }
  }
  // 每次 compareObject 执行的返回效果
  return status
}

测试代码:

// 判断两个工具的内容相等
const obj1 = {
  a: 1,
  b: {
    c: 2,
    d: {
      e: 4
    }
  }
}
const obj2 = {
  a: 1,
  b: {
    c: 2,
    d: {
      e: 4
    }
  }
}
console.log(compareObject(obj1, obj2)) // true

// 判断两个工具的内容不相等
const obj1 = {
  a: 1,
  b: {
    c: 2,
    d: {
      e: 4
    }
  }
}
const obj2 = {
  a: 1,
  b: {
    c: 2,
    d: {
      e: 5
    }
  }
}
console.log(compareObject(obj1, obj2)) // false

接下来再来强调一下 compareObject 函数中第 23 行这句要害代码,若是没有这条语句那么最后的返回效果只会取决于两个工具最底层属性(最后一次)的对照效果。

if (!status) {
  break
}

例如,我将两个工具变为下面这样:

const obj1 = {
  a: 1,
  b: {
    c: 3, // 和 obj2 不相等
    d: {
      e: 4
    }
  }
}
const obj2 = {
  a: 1,
  b: {
    c: 2,
    d: {
      e: 4
    }
  }
}
console.log(compareObject(obj1, obj2)) // true

可以看到最后的返回效果是 true,由于最后的一次对照是 e 属性,它们的值是相等的。

上面这样的写法应该另有一些情形没有考虑到,对于我的项目需求而言已经足够了,若是哪位小伙伴发现了希望可以提出来,然后再将它改善一下,非常感谢。

,

Sunbet

Sunbet www.shfkgcjxyxgs.com Sunbet作为一家极具国际影响力的真人在线娱乐平台,在线真人、棋牌、体育类游戏琳琅满目,数不胜数。无需多言,向来优质的服务态度更是倍受好评。Sunbet是整个亚洲最大最广为流传的线上平台,它不容置疑的业务能力和细致入微的服务质量吸引了成千上万的Sunbet玩家蜂拥而入。

版权声明

本文仅代表作者观点,
不代表本站Allbet Gaming的立场。
本文系作者授权发表,未经许可,不得转载。

评论

精彩评论
  • 2020-05-20 00:14:28

    www.66rfd.com(www.qzmhjs.com)是Sunbet 申博的官方网站。www.66rfd.com提供申博开户(sunbet开户)、SunbetAPP下载、Sunbet代理合作等业务。我的心上文,嘿嘿

  • 2020-09-09 00:12:21

    欧博手机版下载欢迎进入欧博手机版下载(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。只会666了

标签列表

    站点信息

    • 文章总数:620
    • 页面总数:0
    • 分类总数:8
    • 标签总数:878
    • 评论总数:509
    • 浏览总数:66861

    文章归档