var modeler = {}; //比較數組是否相同 modeler.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=modeler.compObj(array1[i],array2[i]); if(!ggg){ return false; } } } else{ return false; } }else{ throw new Error("argunment is error ;"); } return true; }; //比較兩個對象是否相等 modeler.compObj=function(obj1,obj2){ if( (obj1&&typeof obj1==="object" && !(obj1.constructor==Array)) && ((obj2 && typeof obj2==="object" && !(obj2.constructor==Array)))){ var count1=modeler.propertyLength(obj1); var count2=modeler.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(!modeler.compArray(obj1[ob],obj2[ob])){ return false; }; }else if(typeof obj1[ob]==="object"&&typeof obj2[ob]==="object"){// 屬性是對象 if(!modeler.compObj(obj1[ob],obj2[ob])){ return false; }; }else if(obj1[ob] && obj2[ob] && typeof obj1[ob] === typeof obj2[ob]){// 純屬性 if(obj1[ob]!==obj2[ob]){ return false; }; }else{ return false; } }else{ return false; } } }else{ return false; } }else if((obj1 && obj1.constructor==Array) && (obj2 && obj2.constructor==Array)){ if(!modeler.compArray(obj1,obj2)){ return false; }; }else if(obj1 && obj2){ return obj1 === obj2; }else { return false; } return true; }; //獲得對象上的屬性個數 modeler.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;"); } };
以上為網上借鑒的代碼,以及作者結合本身項目業務長青修改了其中的部分代碼,還請各位指點。