1. 数组中的成员类型相同,顺序可以不同。例如[1, true] 与 [false, 2]是相似的。
2. 数组的长度一致。
3. 类型的判断范围,需要区分:String, Boolean, Number, undefined, null, 函数,日期, window.
当以上全部满足,则返回"判定结果:通过",否则返回"判定结果:不通过"。
function getType(item) {
if (item == null) {
return "null"
}
var t = typeof item;
if (t != "object") {
return t;
}
var s = Object.prototype.toString.apply(item);
s = s.substring(8, s.length - 1);
if (s != "object") {
return s;
}
if (item.constructor == Object) {
return "object";
}
//"[object Date]" "[object global]
}
function setTypeObj(typeString, type) {
if (typeString == "String") {
type.s += 1;
} else if (typeString == "Boolean") {
type.b += 1;
} else if (typeString == "Number") {
type.num += 1;
} else if (typeString == "undefined") {
type.u += 1;
} else if (typeString == "null") {
type.n += 1;
} else if (typeString == "function") {
type.f += 1;
} else if (typeString == "global") {
type.g += 1;
} else if (typeString == "Date") {
type.d += 1;
}
}
function arraysSimilar(arr1, arr2) {
var isTrue = "判定结果:通过";
var type1 = {s: 0, b: 0, num: 0, u: 0, n: 0, f: 0, d: 0, g: 0},
type2 = {s: 0, b: 0, num: 0, u: 0, n: 0, f: 0, d: 0, g: 0};
if (arr1 instanceof Array && arr1 instanceof Array) {
if (arr1.length == arr2.length) {
for (var i = 0, l = arr1.length; i < l; i++) {
setTypeObj(getType(arr1[i]),type1);
setTypeObj(getType(arr2[i]),type2);
}
for(var typeName in type1){
if(type1[typeName] != type2[typeName]){
isTrue = "判定结果:不通过";
}
}
} else {
isTrue = "判定结果:不通过";
}
} else {
isTrue = "判定结果:不通过";
}
return isTrue;
}