複製程式碼如下:
/*
* 傳輸元素去重
*/
if(typeof Array.prototype.distinct != "函數"){
Array.prototype.distinct = 函數(){
this.sort();
for(var i=0;i<this.length-1;i++){
if($.isPlainObject(this[i]) && $.isPlainObject(this[i+1])){
if(o2o(這個[i],這個[i+1])){
this.splice(i,1);
}
}否則 if($.isArray(this[i]) && $.isArray(this[i+1])){
if(a2a(這個[i],這個[i+1])){
this.splice(i,1);
}
}否則如果(這個[i]===這個[i+1]){
this.splice(i,1);
}
}
}
}
/*
* 比較物件是否相同
*/
函數 o2o(o1,o2){
if(!($.isPlainObject(o1) && $.isPlainObject(o2))){
返回假;
}
var k1k2=[],k1=[],k2=[];
$.each(o1,函數(k,v){
k1.push(k);
});
$.each(o2,函數(k,v){
k2.push(k);
});
if(k1.length!= k2.length){
返回假;
}
k1k2 = k1;
k1k2 = k1k2.concat(k2);
k1k2.distinct();
if(k1.length!= k1k2.length || k2.length != k1k2.length){
返回假;
}
var 標誌=true;
$.each(k1k2,函數(i,v){
var v1= o1[v];
var v2 =o2[v];
if(v1 類型!= v2 類型){
標誌=假;
}別的{
if($.isPlainObject(v1) && $.isPlainObject(v2)){//遞迴
標誌 = o2o(v1,v2);
如果(!標誌){
返回假;
}
}否則 if($.isArray(v1) && $.isArray(v2)){
標誌 = a2a(v1,v2);
如果(!標誌){
返回假;
}
}別的{
如果(v1!== v2){
標誌=假;
}
}
}
});
返回標誌;
}
/*
*比較是否有兩項
*/
函數 a2a(a1,a2){
if(!($.isArray(a1) && $.isArray(a2))){
返回假;
}
if(a1.length!=a2.length){
返回假;
}
a1.sort();
a2.sort();
for(var i=0;i<a1.length;i++){
if(a1[i] 類型!= a2[i] 類型){
返回假;
}
if($.isPlainObject(a1[i]) && $.isPlainObject(a2[i])){
var retVal = o2o(a1[i],a2[i]);
如果(!retVal){
返回假;
}
}else if($.isArray(a1[i]) && $.isArray(a2[i]) ){//遞歸
if(!a2a(a1[i],a2[i])){
返回假;
}
}否則 if(a1[i] !== a2[i]){
返回假;
}
}
返回真;
}