美文网首页让前端飞Web前端之路
JS判断两个复杂变量是否相等—递归🥰

JS判断两个复杂变量是否相等—递归🥰

作者: forJavascript | 来源:发表于2019-12-11 00:56 被阅读0次

前言

JS中判断两个变量是否相等,是我们经常遇到的问题。今天我要探讨的问题是如何优雅的比较复杂变量。

  • JS中比较变量相等的原生方法
    • ===== (建议都使用===,因为==造成类型隐形转换)
    • Object.is(value1, value2)
    • value.toString()
    • ...等等一些方法

以上的方法都只能比较简单变量,无法比较引用类型变量(如Array,Object)。如何优雅判断复杂变量是否相等? 不多废话,直接上代码。


function isObject(obj) {
  return typeof obj === 'object' && obj !== null
}

function isEqual(a, b) {
  if (a === b) return true
  var isObjectA = isObject(a)
  var isObjectB = isObject(b)
  if (isObjectA && isObjectB) {
    try {
      var isArrayA = Array.isArray(a)
      var isArrayB = Array.isArray(b)
      if (isArrayA && isArrayB) { // a b都是数组
        return a.length === b.length && a.every((el, index) => isEqual(el, b[index]))
      } else if (a instanceof Date && b instanceof Date) { // a b都是Date对象
        return a.getTime() === b.getTime()
      } else if (!isArrayA && !isArrayB) { // 此时a b都是纯对象
        var keyA = Object.keys(a)
        var keyB = Object.keys(b)
        return keyA.length === keyB.length && keyA.every(key => isEqual(a[key], b[key]))
      } else {
        return false
      }
    } catch (e) {
      console.log(e)
      return false
    }
  } else if (!isObjectA && !isObjectB) { // a b 可能是string,number,boolean,undefined中的一种
    return String(a) === String(b)
  } else {
    return false
  }
}

这个isEqual函数可以判断绝大部分复杂对象 (除了对象中有函数的)

本人是刚入前端的新人。如有错误,烦请指正

永远不要抛弃理想, 在前端这条路上,冲吧!

相关文章

  • JS判断两个复杂变量是否相等—递归🥰

    前言 JS中判断两个变量是否相等,是我们经常遇到的问题。今天我要探讨的问题是如何优雅的比较复杂变量。 JS中比较变...

  • Day7-容器类型

    ‘==’和‘is’ == - 判断两个数据的值是否相等is - 判断地址是否相等python数据存储:1.给变量赋...

  • day7-拷贝相关

    一.==和is ==——判断两个数据的值是否相等is——判断地址是否相等python数据存储: 给变量赋值的时候,...

  • day7 字典元组容器类型基操

    计算机基础随笔 == :判断两个数据的值是否相等 is:判断地址是否相等 python数据存储: 1.给变量赋值的...

  • 判断两棵二叉树是否相等

    算法思想:先序遍历,递归实现。先判断根节点是否相等,然后在判断左右子树是否相等。代码如下

  • Python中is和==的区别

    输出结果: 总结:is是判断id是否相等,==是判断数据是否相等,如果两个变量的值是字符串,数字,元祖,那么is和...

  • java重写equals方法需要注意

    为什么equals()方法要重写? 判断两个对象在逻辑上是否相等,如根据类的成员变量来判断两个类的实例是否相等,而...

  • python集合操作

    判断两个list是否相等 判断两个tuple是否相等 判断两个set是否相等 list转set list转tupl...

  • 判断是否回文(palindromes)。

    代码 解释 整体思路是,递归地判断字符串的首尾是否相等 如果相等,就排除掉首尾字符,继续判断首尾是否相等,注意在最...

  • 高级语言--Python 11.19

    (1)==------------------------判断变量是否相等 (2)is-------------可...

网友评论

    本文标题:JS判断两个复杂变量是否相等—递归🥰

    本文链接:https://www.haomeiwen.com/subject/hbingctx.html