JavaScript获取多个数组的交集简单实例


Posted in Javascript onNovember 11, 2013

在项目中需要取得多个数组的交集,故本例只是适用于特定场景。比如A数组 var a = {1000,10001,10002,10003}; B数组 var b = {10002, 10003}; C数组var c = {10003}; 需要取得这三个数组的交集数组。
      具体思路为:先初始一个最小数组为A数组,元素个数最小的也是数组A的长度.然后再迭代各个数组,取得这几个数组长度最短的为最小长度,同时得到长度最短数组。然后,迭代最小数组与各个数组,开始比较元素相等,使用计数器来判断是否该元素在各个数组中都存在即为交集元素.
      思路比较简单,但是可以实现多数组取得交集,代码如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
<HTML> 
 <HEAD> 
  <TITLE> New Document </TITLE> 
  <META NAME="Generator" CONTENT="EditPlus"> 
  <META NAME="Author" CONTENT=""> 
  <META NAME="Keywords" CONTENT=""> 
  <META NAME="Description" CONTENT=""> 
  <script> 
        function getValues(obj){     
            var values = ""; 
            var l = obj.options.length; 
            for (var i=0; i<l; i++) { 
                if (i != (l-1)) { 
                    values += obj.options(i).value + "_"; 
                } 
                else { 
                    values += obj.options(i).value; 
                } 
            } 
            return values; 
        }         function _test() { 
            var ids = getValues(document.all.aa); 
            var aa = _getIntersection(ids); 
        } 
        function _getIntersection(src) { 
            var tAry = src.split("_"); 
            //最小数组 
            var minAry = null; 
            var min = tAry[0].split(",").length; //初始化第一个为长度最小的数组 
            minAry = tAry[0].split(","); 
            for (var i = 1, len = tAry.length; i<len; i++) { 
                var temp = tAry[i].split(","); 
                if (temp.length < min) { 
                    min = temp.length; 
                    minAry = temp; 
                }  
            } 
            alert("最小数组:"+minAry); 
            var ret = ''; 
            for (var i = 0, len = minAry.length; i<len; i++) { 
                var srcNum = parseInt(minAry[i]); 
                var counter = 0; 
                for (var j = 0, ll = tAry.length; j<ll; j++) { 
                    var tt = tAry[j].split(","); 
                    for (var k = 0, l = tt.length; k<l; k++) { 
                        var tarNum = parseInt(tt[k]); 
                        if (srcNum == tarNum) { 
                            counter ++; 
                        } 
                    } 
                } 
                if (counter == tAry.length) { 
                    ret += srcNum + ","; 
                } 
            } 
            ret = strSlice(ret, ','); 
            alert("交集是:" + ret); 
        } 
        //去掉结尾分隔符 
        function strSlice(str, split){ 
            if ((str!=null && str!="") && (split!=' ')) 
                return ((str.charAt(str.length-1) == split) ? str.substring(0, str.length-1) : str); 
            else 
                return str; 
        } 
  </script> 
 </HEAD> 
 <BODY> 
    <button onclick="javascript:_test();">测试</button> 
    <select name="aa" id="aa" size="6" multiple> 
        <OPTION value="10004,10005,10008,10009,10010,10018">测试1</OPTION> 
        <OPTION value="10004,10005,10006,10008,10009,10010,10018">测试2</OPTION> 
        <OPTION value="10004,10005,10006,10008,10009,10010,10018">测试3</OPTION> 
        <OPTION value="10004,10006,10008">测试4</OPTION> 
        <OPTION value="10004,10010,10018">测试5</OPTION> 
    </select> 
 </BODY> 
</HTML>
Javascript 相关文章推荐
javascript 写的一个简单的timer
Jul 30 Javascript
用js实现的自定义的对话框的实现代码
Mar 21 Javascript
JavaScript中的onerror事件概述及使用
Apr 01 Javascript
js实现倒计时(距离结束还有)示例代码
Jul 24 Javascript
jquery live()调用不存在的解决方法
Feb 26 Javascript
轻松学习jQuery插件EasyUI EasyUI实现拖动基本操作
Nov 30 Javascript
详解jQuery中的empty、remove和detach
Apr 11 Javascript
Angular2开发——组件规划篇
Mar 28 Javascript
JS获取子节点、父节点和兄弟节点的方法实例总结
Jul 06 Javascript
layui table动态表头 改变表格头部 重新加载表格的方法
Sep 21 Javascript
webpack+express实现文件精确缓存的示例代码
Jun 11 Javascript
Vue页面手动刷新,实现导航栏激活项还原到初始状态
Aug 06 Javascript
JavaScript splice()方法详解
Sep 22 #Javascript
javascript与cookie 的问题详解
Nov 11 #Javascript
JavaScript设置首页和收藏页面的小例子
Nov 11 #Javascript
JS将表单导出成EXCEL的实例代码
Nov 11 #Javascript
AJAX跨域请求json数据的实现方法
Nov 11 #Javascript
Javascript弹出窗口的各种方法总结
Nov 11 #Javascript
探讨js中的双感叹号判断
Nov 11 #Javascript
You might like
php中filter函数验证、过滤用户输入的数据
2014/01/13 PHP
php 判断网页是否是utf8编码的方法
2014/06/06 PHP
PHP获取表单所有复选框的值的方法
2014/08/28 PHP
php结合curl实现多线程抓取
2015/07/09 PHP
PHP实现将base64编码字符串转换成图片示例
2018/06/22 PHP
利用JS延迟加载百度分享代码,提高网页速度
2013/07/01 Javascript
js实现网页倒计时、网站已运行时间功能的代码3例
2014/04/14 Javascript
JavaScript中的索引数组、关联数组和静态数组、动态数组讲解
2014/11/08 Javascript
纯js实现重发验证码按钮倒数功能
2015/04/21 Javascript
JS脚本根据手机浏览器类型跳转WAP手机网站(两种方式)
2015/08/04 Javascript
Bootstrap自定义文件上传下载样式
2016/05/26 Javascript
整理关于Bootstrap列表组的慕课笔记
2017/03/29 Javascript
详解使用create-react-app快速构建React开发环境
2018/05/16 Javascript
详解swiper在vue中的应用(以3.0为例)
2018/09/20 Javascript
利用jsonp解决js读取本地json跨域的问题
2018/12/11 Javascript
解决vue移动端适配问题
2018/12/12 Javascript
keep-Alive搭配vue-router实现缓存页面效果的示例代码
2020/06/24 Javascript
解决vue使用vant下拉框van-dropdown-item 绑定title值不变问题
2020/08/05 Javascript
微信小程序实现翻牌抽奖动画
2020/09/21 Javascript
antd design table更改某行数据的样式操作
2020/10/31 Javascript
利用Python获取赶集网招聘信息前篇
2016/04/18 Python
关于python pyqt5安装失败问题的解决方法
2017/08/08 Python
解决python ogr shp字段写入中文乱码的问题
2018/12/31 Python
python判断文件是否存在,不存在就创建一个的实例
2019/02/18 Python
Python 实现输入任意多个数,并计算其平均值的例子
2019/07/16 Python
Python循环实现n的全排列功能
2019/09/16 Python
python各层级目录下import方法代码实例
2020/01/20 Python
Django 删除upload_to文件的步骤
2020/03/30 Python
Jupyter Notebook的连接密码 token查询方式
2020/04/21 Python
Python3中FuzzyWuzzy库实例用法
2020/11/18 Python
试述DBMS的主要功能
2016/11/13 面试题
解释一下ruby中的特殊方法与特殊类
2013/02/26 面试题
物理学专业自荐信
2014/06/11 职场文书
2014年司机工作总结
2014/11/21 职场文书
初二数学教学反思
2016/02/17 职场文书
2016年全国爱牙日宣传活动总结
2016/04/05 职场文书