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 相关文章推荐
用AJAX返回HTML片段中的JavaScript脚本
Jan 04 Javascript
人人网javascript面试题 可以提前实现下
Jan 05 Javascript
自定义jQuery选项卡插件实例
Mar 27 Javascript
多个datatable共存造成多个表格的checkbox都被选中
Jul 11 Javascript
js对字符的验证方法汇总
Feb 04 Javascript
javascript cookie用法基础教程(概念,设置,读取及删除)
Sep 20 Javascript
js编写三级联动简单案例
Dec 21 Javascript
js实现点击按钮弹出上传文件的窗口
Dec 23 Javascript
使用ionic在首页新闻中应用到的跑马灯效果的实现方法
Feb 13 Javascript
Vue.js如何实现路由懒加载浅析
Aug 14 Javascript
Vue2.5 结合 Element UI 之 Table 和 Pagination 组件实现分页功能
Jan 26 Javascript
微信小程序实现点击空白隐藏的方法示例
Aug 13 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 array_flip() 删除数组重复元素
2009/01/14 PHP
PHP数据集构建JSON格式及新数组的方法
2012/11/07 PHP
PHP如何使用Memcached
2016/04/05 PHP
PHP将字符串首字母大小写转换的实例
2017/01/21 PHP
php 删除一维数组中某一个值元素的操作方法
2018/02/01 PHP
Laravel框架路由和控制器的绑定操作方法
2018/06/12 PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
2020/04/04 PHP
很全的显示阴历(农历)日期的js代码
2009/01/01 Javascript
jQuery 动态酷效果实现总结
2009/12/27 Javascript
JavaScript高级程序设计 事件学习笔记
2011/09/10 Javascript
js判断两个日期是否相等的方法
2013/09/10 Javascript
jquery插件开发之实现jquery手风琴功能分享
2014/03/10 Javascript
js+csss实现的一个带复选框的下拉框
2014/09/29 Javascript
JQuery之proxy实现绑定代理方法
2016/08/01 Javascript
JSON对象 详解及实例代码
2016/10/18 Javascript
快速入门Vue
2016/12/19 Javascript
JS多文件上传的实例代码
2017/01/11 Javascript
nodejs利用ajax实现网页无刷新上传图片实例代码
2017/06/06 NodeJs
详解Angular5路由传值方式及其相关问题
2018/04/28 Javascript
js限制input只能输入有效的数字(第一个不能是小数点)
2018/09/28 Javascript
文章或博客自动生成章节目录索引(支持三级)的实现代码
2020/05/10 Javascript
[41:08]TNC vs VG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[58:54]EG vs RNG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
python中的字典使用分享
2016/07/31 Python
用pickle存储Python的原生对象方法
2017/04/28 Python
python脚本替换指定行实现步骤
2017/07/11 Python
将pandas.dataframe的数据写入到文件中的方法
2018/12/07 Python
python Matplotlib底图中鼠标滑过显示隐藏内容的实例代码
2019/07/31 Python
Javascript如何发送一个Ajax请求
2015/01/26 面试题
网络工程与软件技术毕业生自荐信
2013/09/24 职场文书
乡下人家教学反思
2014/02/01 职场文书
大型会议接待方案
2014/03/01 职场文书
主要负责人任命书
2014/06/06 职场文书
小学兴趣小组活动总结
2014/07/07 职场文书
python字符串常规操作大全
2021/05/02 Python
vue实现水波涟漪效果的点击反馈指令
2021/05/31 Vue.js