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编程起步(第六课)
Feb 27 Javascript
jquery可见性过滤选择器使用示例
Jun 24 Javascript
关闭ie窗口清除Session的解决方法
Jan 10 Javascript
js 获取时间间隔实现代码
May 12 Javascript
jquery实现在页面加载的时自动为日期插件添加当前日期
Aug 20 Javascript
jQuery学习笔记之jQuery中的$
Jan 19 Javascript
JS实现隐藏同级元素后只显示JS文件内容的方法
Sep 04 Javascript
vue2滚动条加载更多数据实现代码
Jan 10 Javascript
js图片轮播插件的封装
Jul 21 Javascript
js事件委托和事件代理案例分享
Jul 25 Javascript
JavaScript满天星导航栏实现方法
Mar 08 Javascript
vue 移动端适配方案详解
Nov 15 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
这部番真是良心,画质好到像风景区,剧情让人跟着小公会热血沸腾
2020/03/10 日漫
文章推荐系统(三)
2006/10/09 PHP
用Php实现链结人气统计
2006/10/09 PHP
php5 pdo新改动加载注意事项
2008/09/11 PHP
PHP生成随机用户名和密码的实现代码
2013/02/27 PHP
解析centos中Apache、php、mysql 默认安装路径
2013/06/25 PHP
destoon整合UCenter图文教程
2014/06/21 PHP
PHP实现基于栈的后缀表达式求值功能
2017/11/10 PHP
使用jquery给input和textarea设定ie中的focus
2008/05/29 Javascript
js split 的用法和定义 js split分割字符串成数组的实例代码
2012/05/13 Javascript
jquery实现简单手风琴菜单效果实例
2015/06/13 Javascript
关于js里的this关键字的理解
2015/08/17 Javascript
原生javascript 学习之js变量全面了解
2016/07/14 Javascript
详解AngularJs中$sce与$sceDelegate上下文转义服务
2016/09/21 Javascript
JS获取html元素的标记名实现方法
2016/10/08 Javascript
JavaScript 深层克隆对象详解及实例
2016/11/03 Javascript
jQuery插件Echarts实现的渐变色柱状图
2017/03/23 jQuery
angular2中Http请求原理与用法详解
2018/01/11 Javascript
如何从零开始利用js手写一个Promise库详解
2018/04/19 Javascript
深入理解Angularjs 脏值检测
2018/10/12 Javascript
JS数组Object.keys()方法的使用示例
2019/06/05 Javascript
浅谈webpack构建工具配置和常用插件总结
2020/05/11 Javascript
vue使用element-ui实现表单验证
2020/12/13 Vue.js
对Python中range()函数和list的比较
2018/04/19 Python
Python基础之函数的定义与使用示例
2019/03/23 Python
python二进制文件的转译详解
2019/07/03 Python
对python中return与yield的区别详解
2020/03/12 Python
CSS3中:nth-child和:nth-of-type的区别深入理解
2014/03/10 HTML / CSS
英国百年闻名的优质健康产品连锁店:Holland & Barrett
2019/12/19 全球购物
5s推行计划书
2014/05/06 职场文书
三好学生先进事迹材料
2014/08/28 职场文书
入党积极分子培养人意见
2015/06/02 职场文书
中学生国庆节演讲稿2015
2015/07/30 职场文书
2016年情人节广告语
2016/01/28 职场文书
OpenCV-Python模板匹配人眼的实例
2021/06/08 Python
mysql函数全面总结
2021/11/11 MySQL