请在index.html文件中,编写arraysSimilar函数,实现判断传入的两个数组是否相似。具体需求:
1. 数组中的成员类型相同,顺序可以不同。例如[1, true] 与 [false, 2]是相似的。
2. 数组的长度一致。
3. 类型的判断范围,需要区分:String, Boolean, Number, undefined, null, 函数,日期, window.
1. 数组中的成员类型相同,顺序可以不同。例如[1, true] 与 [false, 2]是相似的。
2. 数组的长度一致。
3. 类型的判断范围,需要区分:String, Boolean, Number, undefined, null, 函数,日期, window.
当以上全部满足,则返回"判定结果:通过",否则返回"判定结果:不通过"。
function arraysSimilar(arr1, arr2){
if(arr1 instanceof Array && arr2 instanceof Array && arr1.length === arr2.length)
{
var numInArr1 = 0;
var numInArr2 = 0;
var booleanInArr1 = 0;
var booleanInArr2 = 0;
var funInArr1 = 0;
var funInArr2 = 0;
var undefinedInArr1 = 0;
var undefinedInArr2 = 0;
var stringInArr1 = 0;
var stringInArr2 = 0;
var nullInArr1 = 0;
var nullInArr2 = 0;
var dateInArr1 = 0;
var dateInArr2 = 0;
var windowInArr1 = 0;
var windowInArr2 = 0;
for (var i = 0; i < arr1.length; i++) {
if(typeof arr1[i] === 'number' ){
numInArr1 ++;
} else if(typeof arr1[i] === 'boolean'){
booleanInArr1 ++;
} else if(typeof arr1[i] === 'function'){
funInArr1 ++;
} else if(typeof arr1[i] === 'undefined'){
undefinedInArr1 ++;
} else if(typeof arr1[i] === 'string'){
stringInArr1 ++;
} else if(typeof arr1[i] ==='object'){
if(Object.prototype.toString.apply(arr1[i]) === '[object Null]'){
nullInArr1 ++;
} else if(Object.prototype.toString.apply(arr1[i]) === '[object Date]'){
dateInArr1 ++;
} else if(Object.prototype.toString.apply(arr1[i]) === '[object global]'){
windowInArr1 ++;
}
}
if(typeof arr2[i] === 'number'){
numInArr2 ++;
} else if(typeof arr2[i] === 'boolean'){
booleanInArr2 ++;
} else if(typeof arr2[i] === 'function'){
funInArr2 ++;
} else if(typeof arr2[i] === 'undefined'){
undefinedInArr2 ++;
} else if(typeof arr2[i] === 'string'){
stringInArr2 ++;
} else if(typeof arr2[i] ==='object'){
if(Object.prototype.toString.apply(arr2[i]) === '[object Null]'){
nullInArr2 ++;
} else if(Object.prototype.toString.apply(arr2[i]) === '[object Date]'){
dateInArr2 ++;
} else if(Object.prototype.toString.apply(arr2[i]) === '[object global]'){
windowInArr2 ++;
}
}
}
console.log("num---"+numInArr1);
console.log("num---"+numInArr2);
console.log("boo---"+booleanInArr1);
console.log("boo---"+booleanInArr2);
console.log("null---"+nullInArr1);
console.log("null---"+nullInArr2);
console.log("window---"+windowInArr1);
console.log("window---"+windowInArr2);
console.log("date---"+dateInArr1);
console.log("date---"+dateInArr2);
console.log("string---"+stringInArr1);
console.log("string---"+stringInArr2);
console.log("fun---"+funInArr1);
console.log("fun---"+funInArr2);
console.log("undefined---"+undefinedInArr1);
console.log("undefined---"+undefinedInArr2);
if(numInArr1 == numInArr2 && booleanInArr1==booleanInArr2 && funInArr1==funInArr2 && undefinedInArr1==undefinedInArr2 && stringInArr1==stringInArr2 && nullInArr1==nullInArr2 && dateInArr1==dateInArr2 && windowInArr1==windowInArr2){
console.log('================================true');
return true;
}else{
console.log('================================false');
return false;
}
}
return false;
}
var result=function(){
//以下为多组测试数据
var cases=[{
arr1:[1,true,null],
arr2:[null,false,100],
expect:true
},{
arr1:[function(){},100],
arr2:[100,{}],
expect:false
},{
arr1:[null,999],
arr2:[{},444],
expect:false
},{
arr1:[window,1,true,new Date(),"hahaha",(function(){}),undefined],
arr2:[undefined,(function(){}),"okokok",new Date(),false,2,window],
expect:true
},{
arr1:[new Date()],
arr2:[{}],
expect:false
},{
arr1:[window],
arr2:[{}],
expect:false
},{
arr1:[undefined,1],
arr2:[null,2],
expect:false
},{
arr1:[new Object,new Object,new Object],
arr2:[{},{},null],
expect:false
},{
arr1:null,
arr2:null,
expect:false
},{
arr1:[],
arr2:undefined,
expect:false
},{
arr1:"abc",
arr2:"cba",
expect:false
}];
//使用for循环, 通过arraysSimilar函数验证以上数据是否相似,如相似显示“通过”,否则"不通过",所以大家要完成arraysSimilar函数,具体要求,详见任务要求。
for(var i=0;i<cases.length;i++){
if(arraysSimilar(cases[i].arr1,cases[i].arr2)!==cases[i].expect) {
document.write("不通过!case"+(i+1)+"不正确!arr1="+JSON.stringify(cases[i].arr1)+", arr2="+JSON.stringify(cases[i].arr2)+" 的判断结果不是"+cases[i].expect);
return false;
}
}
return true;
}();
document.write("判定结果:"+(result?"通过":"不通过"));