问题描述
- 请问大家 js中有没有什么简单的方法比较两个对象是否相等
-
如题 就像下面的两个
objA={ a:'123', b:'456' };objB={ a:'123', b:'000' };
很明显不等 应该返回false 求解答
解决方案
objA == objB
本来就返回false
解决方案二:
没有,需要自己加比较方法
<script>
Object.prototype.equals = function(obj){
if(this == obj)
return true;
if(typeof(obj)=="undefined"||obj==null||typeof(obj)!="object")
return false;
var length = 0; var length1=0;
for(var ele in this) {
length++;
}
for(var ele in obj) {
length1++;
}
if(length!=length1)
return false;
if(obj.constructor==this.constructor){
for(var ele in this){
if(typeof(this[ele])=="object") {
if(!this[ele].equals(obj[ele]))
return false;
}
else if(typeof(this[ele])=="function"){
if(!this[ele].toString().equals(obj[ele].toString()))
return false;
}
else if(this[ele]!=obj[ele])
return false;
}
return true;
}
return false;
};
objA={ a:'123', b:'456' };
objB={ a:'123', b:'000' };
alert(objA.equals(objB));
objC={ a:'123', b:'456' };
alert(objA.equals(objC));
</script>
解决方案三:
转为字符串后比较
objA={ a:'123', b:'456' ,c:function(){return 1}};
objB={ b:'456', a:'123' ,c:function(){return 1}};
var sA=[],sB=[];
for(attr in objA)sA.push(attr+':'+objA[attr])
for(attr in objB)sB.push(attr+':'+objB[attr])
sA.sort(function(a,b){return a.split(':')[0]>b.split(':')?1:-1;});
sB.sort(function(a,b){return a.split(':')[0]>b.split(':')?1:-1;});
console.log(sA.join())
console.log(sB.join())
alert(sA.join()==sB.join())
时间: 2024-11-02 18:25:21