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 相关文章推荐
任意位置显示html菜单
Feb 01 Javascript
Prototype Hash对象 学习
Jul 19 Javascript
jQuery实现页面内锚点平滑跳转特效的方法总结
May 11 Javascript
jquery+ajax请求且带返回值的代码
Aug 12 Javascript
Javascript基础之数组的使用
May 13 Javascript
JS扩展类,克隆对象与混合类实例分析
Nov 26 Javascript
Node.JS中事件轮询(Event Loop)的解析
Feb 25 Javascript
详解使用JS如何制作简单的ASCII图与单极图
Mar 31 Javascript
详解Angular2响应式表单
Jun 14 Javascript
bootstrap table实现x-editable的行单元格编辑及解决数据Empty和支持多样式问题
Aug 10 Javascript
基于vue2实现上拉加载功能
Nov 28 Javascript
小程序自定义日历效果
Dec 29 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中实现进程间通讯
2006/10/09 PHP
HTML IMG标签 onload 内存溢出导致浏览器CPU占用过高
2021/03/09 Javascript
jQuery效果 slideToggle() 方法(在隐藏和显示之间切换)
2011/06/28 Javascript
jquery中获取元素的几种方式小结
2011/07/05 Javascript
jquery sortable的拖动方法示例详解
2014/01/16 Javascript
检查输入的是否是数字使用keyCode配合onkeypress事件
2014/01/23 Javascript
使用GruntJS构建Web程序之构建篇
2014/06/04 Javascript
jQuery实现返回顶部功能适合不支持js的浏览器
2014/08/19 Javascript
js实现window.open不被拦截的解决方法汇总
2014/10/30 Javascript
深入理解JavaScript系列(43):设计模式之状态模式详解
2015/03/04 Javascript
javascript获取本机操作系统类型的方法
2015/08/13 Javascript
微信小程序开发实战教程之手势解锁
2016/11/18 Javascript
JavaScript获取select中text值的方法
2017/02/13 Javascript
Vue 自定义指令实现一键 Copy功能
2019/09/16 Javascript
使用vue重构资讯页面的实例代码解析
2019/11/26 Javascript
vue实现移动端项目多行文本溢出省略
2020/07/29 Javascript
微信小程序实现拼图小游戏
2020/10/22 Javascript
Python实现的监测服务器硬盘使用率脚本分享
2014/11/07 Python
python交互式图形编程实例(三)
2017/11/17 Python
Django密码系统实现过程详解
2019/07/19 Python
django+tornado实现实时查看远程日志的方法
2019/08/12 Python
Win系统PyQt5安装和使用教程
2019/12/25 Python
Python实现捕获异常发生的文件和具体行数
2020/04/25 Python
HTML5 新标签全部总汇(推荐)
2016/06/13 HTML / CSS
video.js支持m3u8格式直播的实现示例
2020/05/20 HTML / CSS
Bobbi Brown芭比波朗美国官网:化妆师专业彩妆保养品品牌
2016/08/18 全球购物
SKECHERS斯凯奇中国官网:来自美国的运动休闲品牌
2018/11/14 全球购物
学生个人自我鉴定
2014/03/26 职场文书
公司爱心捐款倡议书
2014/05/14 职场文书
五四青年节优秀演讲稿范文
2014/05/28 职场文书
个人求职自荐信范文
2014/06/20 职场文书
实习生辞职信范文
2015/03/02 职场文书
详解MySQL连接挂死的原因
2021/05/18 MySQL
教你一步步实现一个简易promise
2021/11/02 Javascript
Win10 和 Win11可以共存吗? win10/11产品生命周期/服务更新介绍
2021/11/21 数码科技
关于的python五子棋的算法
2022/05/02 Python