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 相关文章推荐
JS获取屏幕,浏览器窗口大小,网页高度宽度(实现代码)
Dec 17 Javascript
ie8模式下click无反应点击option无反应的解决方法
Oct 11 Javascript
JS实现网页表格自动变大缩小的方法
Mar 09 Javascript
js结合正则实现国内手机号段校验
Jun 19 Javascript
jQuery ajax中使用confirm,确认是否删除的简单实例
Jun 17 Javascript
layer弹出层框架alert与msg详解
Mar 14 Javascript
js使用xml数据载体实现城市省份二级联动效果
Nov 08 Javascript
JS中this的指向以及call、apply的作用
May 06 Javascript
8 个有用的JS技巧(推荐)
Jul 03 Javascript
vue项目中全局引入1个.scss文件的问题解决
Aug 01 Javascript
vue+elementui 对话框取消 表单验证重置示例
Oct 29 Javascript
JavaScript实现外溢动态爱心的效果的示例代码
Mar 21 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
关于手调机和数调机的选择
2021/03/02 无线电
一个PHP操作Access类(PHP+ODBC+Access)
2007/01/02 PHP
php二分法在IP地址查询中的应用
2008/08/12 PHP
PHP explode()函数用法、切分字符串
2012/10/03 PHP
PHP中使用file_get_contents抓取网页中文乱码问题解决方法
2014/12/17 PHP
php使用curl打开https网站的方法
2015/06/17 PHP
PHP使用ODBC连接数据库的方法
2015/07/18 PHP
网页中实现浏览器的最大,最小化和关闭按钮
2007/03/12 Javascript
jQuery调用WebService的实现代码
2011/06/19 Javascript
js取float型小数点后两位数的方法
2014/01/18 Javascript
jquery中常用的函数和属性详细解析
2014/03/07 Javascript
javascript中with()方法的语法格式及使用
2014/08/04 Javascript
JavaScript 浏览器兼容性总结及常用浏览器兼容性分析
2016/03/30 Javascript
AngularJs 弹出模态框(model)
2016/04/07 Javascript
jQuery焦点图轮播插件KinSlideshow用法分析
2016/06/08 Javascript
JS实现图片预览的两种方式
2017/06/27 Javascript
JS 中使用Promise 实现红绿灯实例代码(demo)
2017/10/20 Javascript
老生常谈JS中的继承及实现代码
2018/07/06 Javascript
详解Nuxt内导航栏的两种实现方式
2020/04/16 Javascript
解决element-ui的下拉框有值却无法选中的情况
2020/11/07 Javascript
[06:40]2014DOTA2西雅图国际邀请赛 DK战队巡礼
2014/07/07 DOTA
[59:30]完美世界DOTA2联赛PWL S3 access vs LBZS 第二场 12.20
2020/12/23 DOTA
opencv python 2D直方图的示例代码
2018/07/20 Python
python爬虫神器Pyppeteer入门及使用
2019/07/13 Python
Django通过json格式收集主机信息
2020/05/29 Python
sqlalchemy实现时间列自动更新教程
2020/09/02 Python
python PyAUtoGUI库实现自动化控制鼠标键盘
2020/09/09 Python
Html5踩坑记之mandMobile使用小记
2020/04/02 HTML / CSS
一家专门经营包包的英国网站:MyBag
2019/09/08 全球购物
商务英语大学生职业生涯规划书范文
2014/01/01 职场文书
环保专业大学生职业规划设计
2014/01/10 职场文书
工作评语大全
2014/04/26 职场文书
环保项目建议书
2014/08/26 职场文书
党性分析自查总结
2014/10/14 职场文书
求职信内容一般写什么?
2015/03/20 职场文书
JS前端轻量fabric.js系列之画布初始化
2022/08/05 Javascript