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 函数集合
Jun 11 Javascript
Javascript 面向对象(二)封装代码
May 23 Javascript
jquery实现图片灯箱明暗的遮罩效果
Nov 15 Javascript
jquery高级编程的最佳实践详解
Mar 23 Javascript
javascript记录文本框内文字个数检测文字个数变化
Oct 14 Javascript
微信小程序 九宫格实例代码
Jan 21 Javascript
angularJS 发起$http.post和$http.get请求的实现方法
May 18 Javascript
激动人心的 Angular HttpClient的源码解析
Jul 10 Javascript
浅谈angular2路由预加载策略
Oct 04 Javascript
AngularJS自定义表单验证功能实例详解
Aug 24 Javascript
vue实现带过渡效果的下拉菜单功能
Feb 19 Javascript
vue如何清除浏览器历史栈
May 25 Vue.js
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
用来解析.htpasswd文件的PHP类
2012/09/05 PHP
PHP实现支付宝即时到账功能
2016/12/21 PHP
php使用json-schema模块实现json校验示例
2019/09/28 PHP
jQuery+PHP实现图片上传并提交功能
2020/07/27 PHP
记录几个javascript有关的小细节
2007/04/02 Javascript
js为空或不是对象问题的快速解决方法
2013/12/11 Javascript
7个JS基础知识总结
2014/03/05 Javascript
javascript实现全局匹配并替换的方法
2015/04/27 Javascript
js实现TAB切换对应不同颜色的代码
2015/08/31 Javascript
JavaScript原型及原型链终极详解
2016/01/04 Javascript
js实现网页图片延时加载 提升网页打开速度
2016/01/26 Javascript
JS作用域闭包、预解释和this关键字综合实例解析
2016/12/16 Javascript
JavaScript中创建对象的7种模式详解
2017/02/21 Javascript
js+html5生成自动排列对话框实例
2017/10/09 Javascript
jquery.pagination.js分页使用教程
2018/10/23 jQuery
react高阶组件添加和删除props
2019/04/26 Javascript
jQuery实现简单全选框
2020/09/13 jQuery
Python中捕捉详细异常信息的代码示例
2014/09/18 Python
python自动裁剪图像代码分享
2017/11/25 Python
Python smtplib实现发送邮件功能
2018/05/22 Python
只需7行Python代码玩转微信自动聊天
2019/01/27 Python
使用python+poco+夜神模拟器进行自动化测试实例
2020/04/23 Python
Django实现内容缓存实例方法
2020/06/30 Python
python连接mongodb数据库操作数据示例
2020/11/30 Python
CSS3中新增的对文本和字体的设置
2020/02/03 HTML / CSS
香港太阳眼镜网上商店:SmartBuyGlasses香港
2016/07/22 全球购物
计算机网络专业推荐信
2013/11/24 职场文书
市场营销管理毕业生自荐信
2014/03/03 职场文书
联欢晚会主持词
2014/03/25 职场文书
小学生竞选班长演讲稿
2014/04/24 职场文书
慰问敬老院活动总结
2014/04/26 职场文书
党委班子剖析材料
2014/08/21 职场文书
2019年最新借条范本!
2019/07/08 职场文书
SpringRetry重试框架的具体使用
2021/07/25 Java/Android
idea 在springboot中使用lombok插件的方法
2021/08/02 Java/Android
CSS Transition通过改变Height实现展开收起元素
2021/08/07 HTML / CSS