zoukankan      html  css  js  c++  java
  • javascript 简单实现对两个数组相似度的检验

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
        <title>js 检测两个数组是否相似</title>
    </head>
    <body>
        <script>
            //数组中的成员类型相同,顺序可以不同。例如[1, true] 与 [false, 2]是相似的。
             //数组的长度一致。
            //类型的判断范围,需要区分:String, Boolean, Number, undefined, null, 函数,日期, window.
            function arraysSimilar(arr1, arr2){
                //判断边界
                if (!(arr1 instanceof Array) || !(arr2 instanceof Array)) {
                    return false;
                }
    
                //判断长度
                if (arr1.length != arr2.length) return false;
    
                var i = 0, n = arr1.length, countMap1 = {}, countMap2 = {}, t1, t2, TYPES = ['string', 'boolean', 'number', 'undefined', null, 'function', 'date', 'window'];
    
                for ( ; 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;
                    return r;
    
                }
    
                for (i = 0; i < TYPES.length; i++) {
                    if (countMap1[TYPES[i]] != countMap2[TYPES[i]]) return false;
                }
    
                return true;
            }
    
            document.write(arraysSimilar([1,true], [false, 2]));
        </script>
    </body>
    </html>
    数组中的成员类型相同,顺序可以不同。例如[1, true] 与 [false, 2]是相似的
    数组的长度一致
    类型的判断范围,需要区分:String, Boolean, Number, undefined, null, 函数,日期, window.
  • 相关阅读:
    【并发编程】安全发布对象
    【并发编程】并发的学习步骤
    特殊字符
    【并发编程】【JDK源码】CAS与synchronized
    【并发编程】【JDK源码】JDK的(J.U.C)java.util.concurrent包结构
    【JDK源码】将JDK源码导入IDEA中
    【Linux命令】用户及分用户组
    【Linux命令】linux一次性解压多个.gz或者.tar.gz文件
    悟透JavaScript
    设计模式------工厂模式和抽象工厂模式
  • 原文地址:https://www.cnblogs.com/zhongshanblog/p/4513251.html
Copyright © 2011-2022 走看看