复制番号代番号次のように:
/*
*数组元素去重
*/
if(Array.prototype.distinct のタイプ != "関数"){
Array.prototype.distinct = function(){
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);
}
}else if($.isArray(this[i]) && $.isArray(this[i+1])){
if(a2a(この[i],この[i+1])){
this.splice(i,1);
}
}else if(this[i]===this[i+1]){
this.splice(i,1);
}
}
}
}
/*
*比較対象が同じかどうか
*/
関数 o2o(o1,o2){
if(!($.isPlainObject(o1) && $.isPlainObject(o2))){
false を返します。
}
var k1k2=[],k1 =[],k2=[];
$.each(o1,function(k,v){
k1.push(k);
});
$.each(o2,function(k,v){
k2.push(k);
});
if(k1.length != k2.length){
false を返します。
}
k1k2 = k1;
k1k2 = k1k2.concat(k2);
k1k2.distinct();
if(k1.length != k1k2.length || k2.length != k1k2.length){
false を返します。
}
var フラグ = true;
$.each(k1k2,function(i,v){
var v1= o1[v];
var v2 =o2[v];
if(v1 のタイプ != v2 のタイプ){
フラグ= false;
}それ以外{
if($.isPlainObject(v1) && $.isPlainObject(v2)){//再帰
フラグ = o2o(v1,v2);
if(!フラグ){
false を返します。
}
}else if($.isArray(v1) && $.isArray(v2)){
フラグ = a2a(v1,v2);
if(!フラグ){
false を返します。
}
}それ以外{
if(v1 !== v2){
フラグ= false;
}
}
}
});
リターンフラグ;
}
/*
*比较数組が完全に同じかどうか
*/
関数 a2a(a1,a2){
if(!($.isArray(a1) && $.isArray(a2))){
false を返します。
}
if(a1.length != a2.length){
false を返します。
}
a1.sort();
a2.sort();
for(var i=0;i<a1.length;i++){
if(a1[i] のタイプ != a2[i] のタイプ){
false を返します。
}
if($.isPlainObject(a1[i]) && $.isPlainObject(a2[i])){
var retVal = o2o(a1[i],a2[i]);
if(!retVal){
false を返します。
}
}else if($.isArray(a1[i]) && $.isArray(a2[i]) ){//再帰
if(!a2a(a1[i],a2[i])){
false を返します。
}
}else if(a1[i] !== a2[i]){
false を返します。
}
}
true を返します。
}