慕课网深入浅出javascript

来源:互联网 发布:阿里算法工程师p6待遇 编辑:程序博客网 时间:2024/06/11 11:02
请在index.html文件中,编写arraysSimilar函数,实现判断传入的两个数组是否相似。具体需求:
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?"通过":"不通过"));


0 0