复制代码代码如下 :
/*
*数组元素去重
*/
if(typeof Array.prototype.distinct != "function"){
Array.prototype.distinct = fonction(){
this.sort();
pour(var i=0;i<this.length-1;i++){
if($.isPlainObject(this[i]) && $.isPlainObject(this[i+1])){
si(o2o(this[i],this[i+1])){
this.splice(i,1);
}
}else if($.isArray(this[i]) && $.isArray(this[i+1])){
si(a2a(this[i],this[i+1])){
this.splice(i,1);
}
}sinon si(this[i]===this[i+1]){
this.splice(i,1);
}
}
}
}
/*
*比较对象是否相同
*/
fonction o2o(o1,o2){
if(!($.isPlainObject(o1) && $.isPlainObject(o2))){
renvoie faux ;
}
var k1k2=[],k1 =[],k2=[];
$.each(o1,fonction(k,v){
k1.push(k);
});
$.each(o2,fonction(k,v){
k2.push(k);
});
si(k1.longueur != k2.longueur){
renvoie faux ;
}
k1k2 = k1 ;
k1k2 = k1k2.concat(k2);
k1k2.distinct();
si(k1.longueur != k1k2.longueur || k2.longueur != k1k2.longueur){
renvoie faux ;
}
var drapeau = vrai ;
$.each(k1k2,fonction(i,v){
var v1= o1[v];
var v2 =o2[v];
if(typede v1 != typede v2){
drapeau = faux ;
}autre{
if($.isPlainObject(v1) && $.isPlainObject(v2)){//récursion
drapeau = o2o(v1,v2);
si(!drapeau){
renvoie faux ;
}
}sinon if($.isArray(v1) && $.isArray(v2)){
drapeau = a2a(v1,v2);
si(!drapeau){
renvoie faux ;
}
}autre{
si(v1 !== v2){
drapeau = faux ;
}
}
}
});
drapeau de retour ;
}
/*
*比较数组是否完全相同
*/
fonction a2a(a1,a2){
if(!($.isArray(a1) && $.isArray(a2))){
renvoie faux ;
}
si(a1.longueur != a2.longueur){
renvoie faux ;
}
a1.sort();
a2.sort();
pour(var i=0;i<a1.length;i++){
if(typeof a1[i] != typeof a2[i]){
renvoie faux ;
}
if($.isPlainObject(a1[i]) && $.isPlainObject(a2[i])){
var retVal = o2o(a1[i],a2[i]);
si(!retVal){
renvoie faux ;
}
}else if($.isArray(a1[i]) && $.isArray(a2[i]) ){//récursion
si(!a2a(a1[i],a2[i])){
renvoie faux ;
}
}sinon si(a1[i] !== a2[i]){
renvoie faux ;
}
}
renvoie vrai ;
}