//比较数组是否相同
var Compare = {};
//对于数组无序比较,可以先进行排序
Compare.Sort = function(arArray) {
return arArray.sort(function(x, y) {
return (x.id - y.id)
});
}
//数组比较
Compare.compArray = function(array1, array2) {
if ((array1 && typeof array1 === "object" && array1.constructor === Array) && (array2 && typeof array2 === "object" && array2.constructor === Array)) {
if (array1.length == array2.length) {
for (var i = 0; i < array1.length; i++) {
var ggg = Compare.compObj(array1[i], array2[i]);
if (!ggg) {
return false;
}
}
} else {
return false;
}
} else {
throw new Error("argunment is error ;");
}
return true;
};
//对象比较
Compare.compObj = function(obj1, obj2) //比较两个对象是否相等,不包含原形上的属性计较
{
if ((obj1 && typeof obj1 === "object") && ((obj2 && typeof obj2 === "object"))) {
var count1 = Compare.propertyLength(obj1);
var count2 = Compare.propertyLength(obj2);
if (count1 == count2) {
for (var ob in obj1) {
if (obj1.hasOwnProperty(ob) && obj2.hasOwnProperty(ob)) {
if (obj1[ob].constructor == Array && obj2[ob].constructor == Array) //如果属性是数组
{
if (!Compare.compArray(obj1[ob], obj2[ob])) {
return false;
};
} else if (typeof obj1[ob] === "string" && typeof obj2[ob] === "string") //纯属性
{
if (obj1[ob] !== obj2[ob]) {
return false;
}
} else if (typeof obj1[ob] === "object" && typeof obj2[ob] === "object") //属性是对象
{
if (!Compare.compObj(obj1[ob], obj2[ob])) {
return false;
};
} else {
return false;
}
} else {
return false;
}
}
} else {
return false;
}
}
return true;
};
//获得对象上的属性个数,不包含对象原形上的属性
Compare.propertyLength = function(obj) {
var count = 0;
if (obj && typeof obj === "object") {
for (var ooo in obj) {
if (obj.hasOwnProperty(ooo)) {
count++;
}
}
return count;
} else {
throw new Error("argunment can not be null;");
}
};