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,而是比较复杂的,所以你要全都拆开对比。
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
望采纳~谢谢
这个涉及到值相等,顺序不同
追答看你for in 里面怎么写了,多套几个循环啊。
参考技术D 1,先判断长度是否相同2,再判断A对象的属性在B对象中是否存在和相等追问
先要判断length 是否相同如果相同判断 key是否相同如果相同在判断value是否相等 就是不知道怎么写...
以上是关于JS判断两个对象内容是不是相等的主要内容,如果未能解决你的问题,请参考以下文章