zoukankan      html  css  js  c++  java
  • 编程练习--判断两个数组中数据的数据类型是否相同

    代码是慕课练习题

    这里提供的数据是一个数组中包含多个对象,要求比较每个对象中的属性arr1和arr2对应的数组中元素的类型是否相同。……有点绕,这是我的理解啦

    原题目要求:

      请在index.html文件中,编写arraySimilar函数,实现判断传入的两个数组是否相似。具体需求:

      1.数组中的成员类型相同,顺序可以不同。例如 [1,ture] 与 [false,2] 是相似的。

      2.数组的长度一致

      3.类型的判断范围,需要区分:String,Boolean,Number,undefined,null,函数,日期,window.

      当以上全部满足,则返回“判定结果:通过”,否则返回“判定结果:不通过”。

      参考答案:  

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        
        <script>
            function arraysSimilar(arr1,arr2) {
                //判断边界
                if(!(arr1 instanceof Array)||!(arr2 instanceof Array)){
                    return false;
                }
                //判断长度
                if(arr1.length!==arr2.length){
                    return false;
                }
                var
                n=arr1.length,
                countMap1={},
                countMap2={},
                   t1,
                t2,
                TYPES=['string','boolean','number','undefined','null','function','date','window'];
                for(var i=0;i<n;i++){
                    t1=typeOf(arr1[i]);
                    t2=typeOf(arr2[i]);
                    if(countMap1[t1]){
                        countMap1[t1]++;
                    }else{
                        countMap1[t1]=1;
                    }
                    if(countMap2[t2]){
                        countMap2[t2]++;
                    }else{
                        countMap2[t2]=1;
                    }
                }
                function typeOf(ele){
                    var r;
                    if(ele===null) r='null';
                    else if(ele instanceof Array) r='array';
                    else if(ele===window) r='window';
                    else if(ele instanceof Date) r='date';
                    else  r=typeof ele;
                    console.log(r);
                    return r;
                }
                console.log(countMap1);
                console.log(countMap2);
    
                for(j=0,n=TYPES.length;j<n;j++){
                    if(countMap1[TYPES[j]]!==countMap2[TYPES[j]]){
                        return false;
                    }
                }
                return true;
            }
            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函数,具体要求,详见任务要求。
                console.log(cases.length);
                for (var m= 0;m< cases.length;m++) {
                    console.log(cases[m])
                    if (arraysSimilar(cases[m].arr1, cases[m].arr2)!== cases[m].expect) {
                        document.write("不通过!case" + (m+1) + "不正确!arr1=" + JSON.stringify(cases[m].arr1) + ", arr2=" + JSON.stringify(cases[m].arr2) + " 的判断结果不是" + cases[m].expect);
                        return false;
                    }
                }
                return true;
            }()
        </script>
    </body>
    </html>

      //自己瞎写的  题目都没理解清楚…… 放到这里当作提醒自己好了
            function arraysSimilar(a,b){
                if(Object.prototype.toString.call(a)===Object.prototype.toString.call(b)){
                    if(a instanceof Array){
                        //数组
                        if(a.length==b.length){
                            for(var i=0;i<a.length;i++){
                                for(var j=0;j<b.length;b++){
                                    if( a[i]==b[j]){
                                        return true
                                    }else{
                                        //  return false
                                    }
                                }
                                return false;
                            }
                        }else{
                            return false;
                        }
                    }else{
                        if(a===b){
                            return true;
                        }else{
                            return false;
                        }
                    }
    
                }else{
                    return false;
                }
            }
  • 相关阅读:
    lua学习之环境搭建
    c易错点归纳
    H7-TOOS之SPI控制器功能
    搜索旋转排序数组
    电话号码的字母组合
    打家劫舍python实现
    括号生成实现
    玩烂bert--集成输出预测分类、特征向量、参数冻结、推理
    tensorflow 查看ckpt模型中参数值
    求柱状图中最大的矩形
  • 原文地址:https://www.cnblogs.com/em2464/p/7670850.html
Copyright © 2011-2022 走看看