复制代码代码如下:
/*
*数组元素去重
*/
if(typeof Array.prototype.distinct != "функция"){
Array.prototype.distinct = функция(){
это.сорт();
for(var i=0;i<this.length-1;i++){
if($.isPlainObject(this[i]) && $.isPlainObject(this[i+1])){
if(o2o(this[i],this[i+1])){
this.splice(я,1);
}
}else if($.isArray(this[i]) && $.isArray(this[i+1])){
if(a2a(this[i],this[i+1])){
this.splice(я,1);
}
}иначе if(this[i]===this[i+1]){
this.splice(я,1);
}
}
}
}
/*
*比较对象是否相同
*/
функция o2o(o1,o2){
if(!($.isPlainObject(o1) && $.isPlainObject(o2))){
вернуть ложь;
}
вар k1k2=[],k1 =[],k2=[];
$.each(o1,function(k,v){
k1.push(к);
});
$.each(o2,function(k,v){
k2.push(к);
});
if(k1.length != k2.length){
вернуть ложь;
}
к1к2 = к1;
k1k2 = k1k2.concat(k2);
k1k2.distinct();
if(k1.length != k1k2.length || k2.length != k1k2.length){
вернуть ложь;
}
вар флаг = истина;
$.each(k1k2,function(i,v){
вар v1= o1[v];
вар v2 =o2[v];
if(typeof v1 != typeof v2){
флаг = ложь;
}еще{
if($.isPlainObject(v1) && $.isPlainObject(v2)){//рекурсия
флаг = o2o(v1,v2);
если(!флаг){
вернуть ложь;
}
}иначе if($.isArray(v1) && $.isArray(v2)){
флаг = а2а(v1,v2);
если(!флаг){
вернуть ложь;
}
}еще{
если(v1 !== v2){
флаг = ложь;
}
}
}
});
флаг возврата;
}
/*
* 比较数组是否完全相同
*/
функция а2а(а1,а2){
if(!($.isArray(a1) && $.isArray(a2))){
вернуть ложь;
}
if(a1.length != a2.length){
вернуть ложь;
}
а1.сорт();
а2.сорт();
for(var i=0;i<a1.length;i++){
if(typeof a1[i] != typeof a2[i]){
вернуть ложь;
}
if($.isPlainObject(a1[i]) && $.isPlainObject(a2[i])){
var retVal = o2o(a1[i],a2[i]);
если(!ретВал){
вернуть ложь;
}
}else if($.isArray(a1[i]) && $.isArray(a2[i]) ){//recursion
if(!a2a(a1[i],a2[i])){
вернуть ложь;
}
}иначе if(a1[i] !== a2[i]){
вернуть ложь;
}
}
вернуть истину;
}