JavaScript实现判断传入的两个数组是否相似

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/laohoubin/article/details/46239669




实现判断传入的两个数组是否相似。具体需求:  
  
 1. 数组中的成员类型相同,顺序可以不同。例如[1, true] 与 [false, 2]是相似的。  
  
 2. 数组的长度一致。  
  
 3. 类型的判断范围,需要区分:String, Boolean, Number, undefined, null, 函数,日期, window.  
  
当以上全部满足,则返回"true",否则返回"false"

  /*
         *
         * param1 Array 
         * param2 Array
         * return true or false
         */
        function arraysSimilar(arr1, arr2){
            //判断边界
            if(!(arr1 instanceof Array) || !(arr2 instanceof Array)){
                return false;
            }
            //判断长度
            if(arr1.length!==arr2.length) return false;
            //统计arr1中和arr2中成员类型的个数
            var i=0,
            n=arr1.length,
            //声明对象用来存储类型的个数
            countMap1={},
            countMap2={},
            t1,t2,
            TYPES=['string','number','undefined','null','function','date','window'];
            for(;i<n;i++){
                //调用下边自定义的内部函数typeof。获取数组每个成员的类型
                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 instanceof Date) r='date'
                else if(ele === window) r='window'
                else r=typeof ele;
                return r;
            }
            //将上边统计得到的成员类型数量进行比较,如果不一样则数组不相似
            for(i=0,n=TYPES.length;i<n;i++){
                if(countMap1[TYPES[i]]!==countMap2[TYPES[i]]){
                    return false;
                }
            }
            //满足条件则相似
            return true;
        }


慕课网练习:http://www.imooc.com/code/5760


实现判断传入的两个数组是否相似。具体需求:  
  
<span>    </span>1. 数组中的成员类型相同,顺序可以不同。例如[1, true] 与 [false, 2]是相似的。  
  
<span>    </span>2. 数组的长度一致。  
  
<span>    </span>3. 类型的判断范围,需要区分:String, Boolean, Number, undefined, null, 函数,日期, window.  
  
<span>    </span>当以上全部满足,则返回"true",否则返回"false"

猜你喜欢

转载自blog.csdn.net/laohoubin/article/details/46239669
今日推荐