美文网首页Web前端之路让前端飞
js中判断两个参数是否相等的函数

js中判断两个参数是否相等的函数

作者: baiying | 来源:发表于2017-08-09 21:06 被阅读111次

大概思路,总共分为两种类型

  • 基本类型:直接用===判断
  • 引用类型:先判断构造函数是否相等,再判断属性以及属性值是否相等,深度遍历此处用到递归
    注:对象的属性顺序不知道是否必须一致,此处未考虑
function compare(arg1, arg2) {
    if (arg1 === arg2) {
        return true; //基本类型的值全等号就可以判断
    }
    if (arg1.constructor !== arg2.constructor) {
        return false;//引用类型的值如果构造函数不同则不相等
    }
    for (var p in arg1) {//遍历arg1中的属性
        if (arg1.hasOwnProperty(p)) {
            if (!arg2.hasOwnProperty(p)) {
                return false;//arg2中没有该属性则返回false
            }

            if (arg1[p] === arg2[p]) {
                continue; //有且属性值相等,则进行下一轮判断
            }

            if (typeof( arg1[p] ) !== "object") {
                return false;//两个值不全等也不是引用类型,则不相等
            }
            if (!compare(arg1[p], arg2[p])) {
                return false;//有相同的属性值且是引用类型则递归调用自身
            }
        }
    }

    for (p in arg2) { //反过来判断防止arg1是arg2的子集,保证arg2中的属性都在arg1中
        if (arg2.hasOwnProperty(p) && !arg1.hasOwnProperty(p)) {
            return false;
        }
    }
    return true;
};

var a = [1, '2', {a: 1}];
var b = [1, '2', {a: 1}];
var c = {arr: [1, 2, true, undefined], name: 'haha'};
var d = {name: 'haha', arr: [1, 2, true, undefined]};
var e = {name: 'haha', arr: [1, 2, true, undefined], j: 1};

console.log(compare(a, b));//true
console.log(compare(c, d));//true
console.log(compare(d, e));//false

相关文章

  • js中判断两个参数是否相等的函数

    大概思路,总共分为两种类型 基本类型:直接用===判断 引用类型:先判断构造函数是否相等,再判断属性以及属性值是否...

  • python集合操作

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

  • Php 语法记录

    == 两个等号判断值是否相等 常量定义(第三个参数为可选参数) 数组排序

  • python笔记day6

    补充: == 和 is == --- 判断两个数据的值是否相等 is --- 判断地址是否相等 python数...

  • java比较两个list是否相等

    判断两个list是否相等:先判断list的个数是否相等,然后判断是否相互包含。public boolean equ...

  • Python/Numpy判断数组是否相等

    Numpy判断数组是否相等一般是判断两个数组是否完全相等 (array1 == array2) 返回两个矩阵中对应...

  • 二叉树-判断是否相等

    //判断二叉树是否相等的函数

  • python 高级编程①

    1 ‘==’ 与‘is ’的使用 ① ‘==’判断两个对象内容是否相等 ‘is’判断两个对象的地址是否相等 ②在p...

  • Day7-容器类型

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

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

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

网友评论

    本文标题:js中判断两个参数是否相等的函数

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