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 相关文章推荐
ExtJS4利根据登录后不同的角色分配不同的树形菜单
May 02 Javascript
js调用百度地图及调用百度地图的搜索功能
Sep 07 Javascript
JS双击变input框批量修改内容
Dec 12 Javascript
EasyUI修改DateBox和DateTimeBox的默认日期格式示例
Jan 18 Javascript
javaScript字符串工具类StringUtils详解
Dec 08 Javascript
详解基于Vue cli生成的Vue项目的webpack4升级
Jun 19 Javascript
Angular父子组件通过服务传参的示例方法
Oct 31 Javascript
Bootstrap实现省市区三级联动(亲测可用)
Jul 26 Javascript
小程序如何在不同设备上自适应生成海报的实现方法
Aug 20 Javascript
微信小程序 下拉刷新及上拉加载原理解析
Nov 06 Javascript
详解钉钉小程序组件之自定义模态框(弹窗封装实现)
Mar 07 Javascript
vue-video-player 断点续播的实现
Feb 01 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
用PHP动态生成虚拟现实VRML网页
2006/10/09 PHP
php 一元分词算法
2009/11/30 PHP
webpack中引用jquery的简单实现
2016/06/08 Javascript
javascript基础知识讲解
2017/01/11 Javascript
JS表单验证方法实例小结【电话、身份证号、Email、中文、特殊字符、身份证号等】
2017/02/14 Javascript
详解使用Typescript开发node.js项目(简单的环境配置)
2017/10/09 Javascript
seajs中最常用的7个功能、配置示例
2017/10/10 Javascript
详解搭建es6+devServer简单开发环境
2018/09/25 Javascript
微信小程序使用map组件实现检索(定位位置)周边的POI功能示例
2019/01/23 Javascript
小程序异步问题之多个网络请求依次执行并依次收集请求结果
2019/05/05 Javascript
laydate只显示时分 不显示秒的功能实现方法
2019/09/28 Javascript
javascript实现移动端红包雨页面
2020/06/23 Javascript
解决vue2中使用elementUi打包报错的问题
2020/09/22 Javascript
微信小程序使用前置摄像头拍照
2020/10/22 Javascript
[02:35]DOTA2英雄基础教程 狙击手
2014/01/14 DOTA
[02:09:59]火猫TV国士无双dota2 6.82版本详解(下)
2014/09/29 DOTA
python抓取京东价格分析京东商品价格走势
2014/01/09 Python
浅析Python中的多进程与多线程的使用
2015/04/07 Python
浅谈Python单向链表的实现
2015/12/24 Python
Python3实现发送QQ邮件功能(附件)
2020/12/23 Python
python中的随机函数random的用法示例
2018/01/27 Python
django中send_mail功能实现详解
2018/02/06 Python
python 把文件中的每一行以数组的元素放入数组中的方法
2018/04/29 Python
浅谈python连续赋值可能引发的错误
2018/11/10 Python
python+PyQT实现系统桌面时钟
2020/06/16 Python
用python打印1~20的整数实例讲解
2019/07/01 Python
python 中xpath爬虫实例详解
2019/08/26 Python
python中format函数如何使用
2020/06/22 Python
澳大利亚旅游网站:Lastminute
2017/08/07 全球购物
艺术家策划的室内设计:Curious Egg
2019/03/06 全球购物
楼面部长岗位职责范本
2014/02/14 职场文书
卫校毕业生自我鉴定
2014/09/28 职场文书
公安纪律作风整顿剖析材料
2014/10/10 职场文书
2014年法院个人工作总结
2014/12/17 职场文书
2019最新劳动仲裁申请书!
2019/07/08 职场文书
MongoDB orm框架的注意事项及简单使用
2021/06/20 MongoDB