在JavaScript中比较两个对象的成员是否相等有点麻烦,如果只是第一层比较,很容易,但子对象里的属性可能又是一个对象,所以只能递归。
代码:
// 去重
Array.prototype.unique = function () {
this.sort();
var re = [this[0]];
for (var i = 1; i < this.length; i++) {
if (this[i] !== re[re.length-1]) {
re.push(this[i]);
}
}
return re;
}
var objectDeepEqual = function(o1, o2) {
if(typeof o1 != typeof o2){
return false;
}
if(typeof o1.length != typeof o2.length ){
return false;
}
var bool = true;
var keyArr1 = [];
var keyArr2 = [];
for (var i in o1) {
keyArr1.push(i);
}
for (var i in o2) {
keyArr2.push(i);
}
if (keyArr1.length != keyArr2.length) {
return false;
}
for(var i = 0, k = keyArr2.length; i < k; i++){
keyArr1.push(keyArr2[i]);
}
var keyArr = keyArr1.unique();
for(var i=0,k=keyArr.length;i<k;i++){
if ((keyArr[i] in o1) && (keyArr[i] in o2)) {
if (typeof o1[keyArr[i]] == 'object' && typeof o2[keyArr[i]] == 'object' ) {
bool = objectDeepEqual(o1[keyArr[i]], o2[keyArr[i]]);
} else if (o1[keyArr[i]] !== o2[keyArr[i]]){
return false;
}
}else{
return false;
}
}
return bool;
};
...