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 相关文章推荐
JQuery 学习笔记 选择器之二
Jul 23 Javascript
层序遍历在ExtJs的TreePanel中的应用
Oct 16 Javascript
24款热门实用的jQuery插件推荐
Dec 24 Javascript
jQuery实现菜单式图片滑动切换
Mar 14 Javascript
jQuery验证表单格式的使用方法
Jan 10 Javascript
DOM事件探秘篇
Feb 15 Javascript
Vuex简单入门
Apr 19 Javascript
详解JavaScript中return的用法
May 08 Javascript
JQuery 实现文件下载的常用方法分析
Oct 29 jQuery
vue 实现强制类型转换 数字类型转为字符串
Nov 07 Javascript
JS实现碰撞检测效果
Mar 12 Javascript
深入分析jQuery.one() 函数
Jun 03 jQuery
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
[EPIC] Larva vs Flash ZvT @ Crossing Field [2017-10-09]
2020/03/17 星际争霸
php版微信自动登录并获取昵称的方法
2016/09/23 PHP
php UNIX时间戳用法详解
2017/02/16 PHP
jQuery 页面载入进度条实现代码
2009/02/08 Javascript
学习ExtJS Column布局
2009/10/08 Javascript
jQuery 学习第五课 Ajax 使用说明
2010/05/17 Javascript
三级下拉菜单的js实现代码
2011/05/23 Javascript
jQuery 源码分析笔记(3) Deferred机制
2011/06/19 Javascript
js原型链原理看图说明
2012/07/07 Javascript
seajs1.3.0源码解析之module依赖有序加载
2012/11/07 Javascript
JS刷新当前页面的几种方法总结
2013/12/24 Javascript
JavaScript-RegExp对象只能使用一次问题解决方法
2014/06/23 Javascript
javascript实现了照片拖拽点击置顶的照片墙代码
2015/04/03 Javascript
深入讲解AngularJS中的自定义指令的使用
2015/06/18 Javascript
jQuery mobile转换url地址及获取url中目录部分的方法
2015/12/04 Javascript
jQuery动画效果图片轮播特效
2016/01/12 Javascript
jQuery实现简单弹窗遮罩效果
2017/02/27 Javascript
解决vue-cli中stylus无法使用的问题方法
2017/06/19 Javascript
jquery动态添加以及遍历option并获取特定样式名称的option方法
2018/01/29 jQuery
通过nodejs 服务器读取HTML文件渲染到页面的方法
2018/05/17 NodeJs
微信小程序自定义导航教程(兼容各种手机)
2018/12/12 Javascript
JS数组及对象遍历方法代码汇总
2020/06/16 Javascript
Vue Render函数创建DOM节点代码实例
2020/07/08 Javascript
js实现弹窗效果
2020/08/09 Javascript
微信小程序实现自定义动画弹框/提示框的方法实例
2020/11/06 Javascript
Python中使用动态变量名的方法
2014/05/06 Python
Python3下错误AttributeError: ‘dict’ object has no attribute’iteritems‘的分析与解决
2017/07/06 Python
浅谈python和C语言混编的几种方式(推荐)
2017/09/27 Python
8种用Python实现线性回归的方法对比详解
2019/07/10 Python
Python3批量移动指定文件到指定文件夹方法示例
2019/09/02 Python
大学生工作推荐信范文
2013/12/02 职场文书
酒店总经理助理岗位职责
2014/02/01 职场文书
软件部经理岗位职责范本
2014/02/25 职场文书
ktv服务员岗位职责
2015/02/09 职场文书
nginx里的rewrite跳转的实现
2021/03/31 Servers
纯html+css实现打字效果
2021/08/02 HTML / CSS