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中关于indexOf的使用方法与问题小结
Aug 05 Javascript
jquery.post用法之type设置问题
Feb 24 Javascript
使用jQuery jqPlot插件绘制柱状图
Dec 18 Javascript
jQuery.Highcharts.js绘制柱状图饼状图曲线图
Mar 14 Javascript
jq实现左侧显示图片右侧文字滑动切换效果
Aug 04 Javascript
Node.js实用代码段之正确拼接Buffer
Mar 17 Javascript
同步文本框内容JS代码实现
Aug 04 Javascript
js前端解决跨域问题的8种方案(最新最全)
Nov 18 Javascript
jQuery实现的简单拖动层示例
Feb 22 Javascript
实战node静态文件服务器的示例代码
Mar 08 Javascript
用ES6写全屏滚动插件的示例代码
May 02 Javascript
react 移动端实现列表左滑删除的示例代码
Jul 04 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中header的用法详解
2013/06/07 PHP
ThinkPHP连接数据库及主从数据库的设置教程
2014/08/22 PHP
win7安装php框架Yii的方法
2016/01/25 PHP
PHP7实现和CryptoJS的AES加密方式互通示例【AES-128-ECB加密】
2019/06/08 PHP
Laravel 读取 config 下的数据方法
2019/10/13 PHP
PHP实现微信提现功能(微信商城)
2019/11/21 PHP
安装PHP扩展时解压官方 tgz 文件后没有configure文件无法进行配置编译的问题
2020/08/26 PHP
为调试JavaScript添加输出窗口的代码
2010/02/07 Javascript
jQuery实现点击标题输入详细信息
2013/04/16 Javascript
将字符串中由空格隔开的每个单词首字母大写
2014/04/06 Javascript
解决node-webkit 不支持html5播放mp4视频的方法
2015/03/11 Javascript
JavaScript中Boolean对象的属性解析
2015/10/21 Javascript
Bootstrap整体框架之JavaScript插件架构
2016/12/15 Javascript
JS异步加载的三种实现方式
2017/03/16 Javascript
JavaScript面向对象的程序设计(犯迷糊的小羊)
2018/05/27 Javascript
JavaScript实现多态和继承的封装操作示例
2018/08/20 Javascript
Nodejs实现多文件夹文件同步
2018/10/17 NodeJs
js中apply和call的理解与使用方法
2019/11/27 Javascript
vue实现折线图 可按时间查询
2020/08/21 Javascript
javascript实现移动端轮播图
2020/12/09 Javascript
[01:03:38]2014 DOTA2国际邀请赛中国区预选赛5.21 CNB VS CIS
2014/05/22 DOTA
Python验证企业工商注册码
2015/10/25 Python
Flask框架Jinjia模板常用语法总结
2018/07/19 Python
Pycharm远程调试原理及具体配置详解
2019/08/08 Python
wxpython多线程防假死与线程间传递消息实例详解
2019/12/13 Python
python3中布局背景颜色代码分析
2020/12/01 Python
纯CSS实现设置半个字符的样式
2014/07/03 HTML / CSS
在线购买世界上最好的酒:BoozeBud
2018/06/07 全球购物
联想印度官方网上商店:Lenovo India
2019/08/24 全球购物
写一个用矩形法求定积分的通用函数
2012/11/08 面试题
银行进社区活动总结
2014/07/07 职场文书
校园安全广播稿范文
2014/09/25 职场文书
律师函格式范本
2015/05/27 职场文书
html实现弹窗的实例
2021/06/09 HTML / CSS
详解在OpenCV中如何使用图像像素
2022/03/03 Python
开发者首先否认《遗弃》被取消的传言
2022/04/11 其他游戏