美文网首页
JavaScript判断对象是否相等

JavaScript判断对象是否相等

作者: 开飞机的杰瑞 | 来源:发表于2022-03-14 14:20 被阅读0次
  • 方法一

var obj = {a:'a'}, obj1 = {b:'b'}, obj2 = {a:'a'};
// 就是使用
JSON.stringify()
// 先把对象转化成字符串,
// 这样就可以啦

console.log(JSON.stringify(obj) == JSON.stringify(obj1));  // false
console.log(JSON.stringify(obj) == JSON.stringify(obj2));  // true

弊端:这样不是很严谨,如果一个对象里是有两个属性的,只是位置不一样而已,这样的方法就是错误的

var a ={"name":"lsx","age":12};
var b ={"age":12,"name":"lsx"};

// 这样就是错误的
console.log(JSON.stringify(a) == JSON.stringify(b));  // false
  • 方法二

思路: 只要两个对象的名和键值都相同。那么两个对象的内容就相同了
1、用 Object.getOwnPropertyNames 拿到对象的所有键名数组
2、比对键名数组的长度是否相等。否 => false。真 => true
3、比对键名对应的键值是否相等

function isObjectValueEqual(a, b) {
    var aProps = Object.getOwnPropertyNames(a);
    var bProps = Object.getOwnPropertyNames(b);

    if (aProps.length != bProps.length) {
        return false;
    }

    for (var i = 0; i < aProps.length; i++) {
        var propName = aProps[i];
        var propA = a[propName];
        var propB = b[propName];
        if ( propA !== propB) {
            return false;
        }
    }
    return true;
}

弊端:如果 键值也是对象的话,那这个方法就不管用了,比如下面的测试数据

var a = {
    id:1,
    name:2,
    c: {
        age:3
    }
};
var b = {
    id:1,
    name:2,
    c: {
        age:3
    }
}

// 这样就是错误的
console.log(isObjectValueEqual(a,b));  // false
  • 方法三

在实现二的基础上递归实现

isObjectValueEqual(a, b) {
    var aProps = Object.getOwnPropertyNames(a);
    var bProps = Object.getOwnPropertyNames(b);
    if (aProps.length != bProps.length) {
        return false;
    }
    for (var i = 0; i < aProps.length; i++) {
        var propName = aProps[i]
        var propA = a[propName]
        var propB = b[propName]
        if ((typeof (propA) === 'object')) {
            if (this.isObjectValueEqual(propA, propB)) {
                return true
            } else {
                return false
            }
        } else if (propA !== propB) {
            return false
        } else {}
    }
    return true
},

测试

var a = {
    id:1,
    name:2,
    c: {
        age:3
    }
};
var b = {
    id:1,
    name:2,
    c: {
        age:3
    }
}

// 正确
console.log(isObjectValueEqual(a,b));  // true

相关文章

  • JavaScript判断对象是否相等

    在Javascript中相等运算包括"==","===",两者不同之处,不必细说。本文主要跟大家探讨如何判断两个对...

  • JavaScript判断对象是否相等

    方法一 弊端:这样不是很严谨,如果一个对象里是有两个属性的,只是位置不一样而已,这样的方法就是错误的 方法二 思路...

  • JavaScript:判断对象是否相等

    2022-01-10 周一 对比对象的每一个键值对:obj1.a === obj2.a Object.entrie...

  • JavaScript对象相等判断

    对象相等分两种: 1. 对象决对相等: 对象的值以及使用的内存空间一致(即指针指向一致)。这种很好解决,ES6为我...

  • python 高级编程①

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

  • kotlin学习笔记

    $ ?表示对象可能为空 ?: !! ==,=== ==判断值是否相等,===判断值及引用是否完全相等。 ..Kot...

  • 关于isEqual

    isEqual,用来判断两个对象是否相等。但是,与“==”判断指针地址是否相等,不同的是,它判断的是对象的内容方...

  • 25.比较2个对象是否相等

    引用至:JavaScript专题之如何判断两个对象相等

  • C# 相等比较

    引用相等性 判断两个对象是否引用同一基础对象。使用 ReferenceEquals 方法判断: 值相等性 使用 =...

  • JS如何判断俩个对象是否相等

    判断对象相等的步骤:1.先判断俩者是不是对象2.是对象后俩者长度是否一致3.判断俩个对象的所有key值是否相等相同...

网友评论

      本文标题:JavaScript判断对象是否相等

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