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 相关文章推荐
基于jquery的loading效果实现代码
Nov 05 Javascript
javascript 正则表达式相关应介绍
Nov 27 Javascript
解析使用JS 清空File控件的路径值
Jul 08 Javascript
js实现两个值相加alert出来精确到指定位
Sep 25 Javascript
jquery uploadify 在FF下无效的解决办法
Sep 26 Javascript
jQuery之DOM对象和jQuery对象的转换与区别分析
Jan 08 Javascript
解决node-webkit 不支持html5播放mp4视频的方法
Mar 11 Javascript
zTree实现节点修改的实时刷新功能
Mar 20 Javascript
JS中type=&quot;button&quot;和type=&quot;submit&quot;的区别
Jul 04 Javascript
Vue.js学习笔记之修饰符详解
Jul 25 Javascript
vue+element实现表格新增、编辑、删除功能
May 28 Javascript
VUE:vuex 用户登录信息的数据写入与获取方式
Nov 11 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运行出现Notice : Use of undefined constant 的完美解决方案分享
2012/03/05 PHP
php计算数组相同值出现次数的代码(array_count_values)
2015/01/20 PHP
PHP使用gmdate实现将一个UNIX 时间格式化成GMT文本的方法
2015/03/19 PHP
PHP中预定义的6种接口介绍
2015/05/12 PHP
php格式文件打开的四种方法
2018/02/24 PHP
PHP随机生成中文段落示例【测试网站内容时使用】
2020/04/26 PHP
JS应用之禁止抓屏、复制、打印
2008/02/21 Javascript
Web开发者必备的12款超赞jQuery插件
2010/12/03 Javascript
前后台交互过程中json格式如何解析以及如何生成
2012/12/26 Javascript
js下拉框二级关联菜单效果代码具体实现
2013/08/03 Javascript
javascript事件模型介绍
2016/05/31 Javascript
如何解决手机浏览器页面点击不跳转浏览器双击放大网页
2016/07/01 Javascript
完美实现八种js焦点轮播图(上篇)
2016/07/18 Javascript
JS实现简单易用的手机端浮动窗口显示效果
2016/09/07 Javascript
Javascript单例模式的介绍和实例
2016/10/08 Javascript
node.js基础知识小结
2018/02/26 Javascript
浅谈FastClick 填坑及源码解析
2018/03/02 Javascript
layui checkbox默认选中,获取选中值,清空所有选中项的例子
2019/09/02 Javascript
微信小程序如何获取地址
2019/12/24 Javascript
js获取图片的base64编码并压缩
2020/12/05 Javascript
python发送arp欺骗攻击代码分析
2014/01/16 Python
python实现模拟按键,自动翻页看u17漫画
2015/03/17 Python
python在指定目录下查找gif文件的方法
2015/05/04 Python
Django中处理出错页面的方法
2015/07/15 Python
Python中字符串的修改及传参详解
2016/11/30 Python
Python实现的双色球生成功能示例
2017/12/18 Python
解决新django中的path不能使用正则表达式的问题
2018/12/18 Python
Python3.5面向对象程序设计之类的继承和多态详解
2019/04/24 Python
pandas DataFrame 行列索引及值的获取的方法
2019/07/02 Python
Python数据处理篇之Sympy系列(五)---解方程
2019/10/12 Python
html5中监听canvas内部元素点击事件的三种方法
2019/04/28 HTML / CSS
收银出纳员岗位职责
2014/02/23 职场文书
元旦主持词开场白
2015/05/29 职场文书
《活见鬼》教学反思
2016/02/24 职场文书
关于战胜挫折的名言警句大全!
2019/07/05 职场文书
创业计划书之旅游网站
2019/09/06 职场文书