编程练习--判断两个数组中数据的数据类型是否相同

代码是慕课练习题

这里提供的数据是一个数组中包含多个对象,要求比较每个对象中的属性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;
            }
        }

 

posted @ 2017-10-15 14:06  聂小恶  阅读(1166)  评论(0编辑  收藏  举报