慕课网深入浅出javascript

请在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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值