JS判断两个对象内容是不是相等

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS判断两个对象内容是不是相等相关的知识,希望对你有一定的参考价值。

参考技术A ES6有一个方法来判断两个对象是否相等

但是这个相等,和我们平时要的相等可能不一样
这个方法判断的是a和b是不是同一个指针的对象

比如说

但是下面这种情况就不管用了

当我们只需要两个对象的内容相同的时候,他就没效果了

思路
只要两个对象的名和键值都相同。那么两个对象的内容就相同了

1.用Object.getOwnPropertyNames拿到对象的所以键名数组
2.比对键名数组的长度是否相等。否=>false。真=>3
3.比对键名对应的键值是否相等

粗略一看没问题
但是细心的同学发现如果 键值也是对象的话
那这个方法就不管用了

这个时候递归一下就可以解决了
注意,递归的时候要判断prop是不是Object,然后会进入无限递归的死循环

js判断两个对象的值是不是相等

各位大神,如何判断两个对象里面相同属性的值是否相等

判断对象相等的步骤:
1.先判断俩者是不是对象
2.是对象后俩者长度是否一致
3.判断俩个对象的所有key值是否相等相同
4.判断俩个对象的相应的key对应的值是否相同
来一个递归判断里面的对象循环1-4步骤代码如下:
diff(obj1,obj2)
console.log(\'obj12\'+obj1,obj2)
var o1 = obj1 instanceof Object;
var o2 = obj2 instanceof Object;
if(!o1 || !o2)/* 判断不是对象 */
return obj1 === obj2;


if(Object.keys(obj1).length !== Object.keys(obj2).length)
return false;


for(var attr in obj1)
var t1 = obj1[attr] instanceof Object;
var t2 = obj2[attr] instanceof Object;
if(t1 && t2)
return diff(obj1[attr],obj2[attr]);
else if(obj1[attr] !== obj2[attr])
return false;


return true;
参考技术A

你需要的是 js如何获取json属性值

本质目的是,当你从后台获取到数据后,要用js找到这个数据里面你需要的那一段,然后和另外一个数据里面的这一段的值进行比较判断

下面是我在网上复制的一段例子,你可以参考一下。


    //数据为jsonArray
    var data=[name:"a",age:12,name:"b",age:11,name:"c",age:13,name:"d",age:14];
for(var i in data)
               alert(i)//显示的是 1、2、3等数值
    alert(data[i]);//显示为[object,object],不是我们想要的
            alert(data[i].name)//显示name属性的值
    for(var j in data[i])
alert(j);//显示属性的名称
alert(data[i][j])//显示属性的值


 
        for(var n = 0;n<data.length;n++)
            alert(data[n])//和上面一样[[object,object]]
            alert(data[n].name)//[object,object]
             for(var m in data[n])
alert(j);//显示属性的名称
alert(data[i][j])//显示属性的值

追问

我要把每层的对象值取出来对比 判断是否相等 不相等返回false 全部相等返回true

追答

每层都要判断的话比较麻烦吧,我们觉得你这个需求本身就有问题呢。

一般来说你这个对象生成之前,就该把每一项的值判断了

追问

现在就是判断两对象里面所有的key相同的value是不是相等

追答

那就只能参考我上面给的例子,把所有的key和value都分开获取然后进行对比。
因为你这个里面不是一个单纯的json,而是比较复杂的,所以你要全都拆开对比。

参考技术B Object.prototype.vequal = function(obj)
var props1 = Object.getOwnPropertyNames(this);
    var props2 = Object.getOwnPropertyNames(obj);
    if (props1.length != props2.length) 
        return false;
    
    for (var i = 0,max = props1.length; i < max; i++) 
        var propName = props1[i];
        if (this[propName] !== obj[propName]) 
            return false;
        
    
    return true;

var obj1 = id:1,name:"张三"
var obj2 = id:2,name:"李四"
var obj3 = id:1,name:"张三",age:25
var obj4 = id:1,name:"张三"
console.log(obj1.equal(obj2));//false
console.log(obj1.equal(obj3));//false
console.log(obj1.equal(obj4));//true

望采纳~谢谢

参考技术C 自己写个方法,用for in循环遍历json对象,对每一个字都对比,如果有一个不对,就返回不相等。追问

这个涉及到值相等,顺序不同

追答

看你for in 里面怎么写了,多套几个循环啊。

参考技术D 1,先判断长度是否相同
2,再判断A对象的属性在B对象中是否存在和相等追问

先要判断length 是否相同如果相同判断 key是否相同如果相同在判断value是否相等 就是不知道怎么写...

以上是关于JS判断两个对象内容是不是相等的主要内容,如果未能解决你的问题,请参考以下文章

Java中怎么比较两个字符串是不是相等?

JAVA比较两个字符串是不是相等用啥

js判断两个对象的值是不是相等

如何判断两个实体是不是相等?

js判断字符串是不是相等

如何判断两个对象的值是不是相等java