在项目中需要取得多个数组的交集,故本例只是适用于特定场景。比如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获取两个数组交集的方法。分享给大家供大家参考。具体如下: 这里传入的数组必须是已经排过序的 /* finds the intersection of * two arrays in a simple fashion. * * PARAMS * a - ...
介绍了JavaScript获取多个数组的交集简单实例,有需要的朋友可以参考一下
我们交换数组可以实现元素上下移动了,这个效果我们在表格或以前排序算法中都会用到,下面来看一个JavaScript下实现交换数组元素上下移动例子 在写项目的时候,要实现一个数组记录上下移动的示例。写起来也没有没...
javascript构造二维数组 javascript构造二维数组
Javascript不支持多维数组,但是因为数组里面可以包含对象(数组也是一个对象),所以数组可以通过相互嵌套实现类似多维数组的功能 1.1 定义数组 声明有10个元素的数组 复制代码 代码如下: var a = new Array(10); ...
js的Array对象提供了一个叫concat()方法,连接两个或更多的数组,并返回结果。 var c = a.concat(b); //c=[1,2,3,4,5,6]; 这里有一个问题,concat方法连接a、b两个数组后,a、b两个数组的数据不变,同时会返
主要介绍了JavaScript如何获取数组最大值和最小值,需要的朋友可以参考下
韩顺平 轻松搞定javascript第三章 数组.ppt
JavaScript数组(源代码)JavaScript数组(源代码)JavaScript数组(源代码)JavaScript数组(源代码)JavaScript数组(源代码)JavaScript数组(源代码)JavaScript数组(源代码)JavaScript数组(源代码)...
给定两个数组,编写一个函数来计算它们的交集。 - 输出结果中的每个元素一定是唯一的。 ``` 输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2] 输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出:[9,4] ``...
javascript将json格式数组下载为excel表格的方法.docx
JavaScript应用实例-数组映射排序.js
Intersector - 针对不同内容类型高度优化的数组交集
在thymeleaf网页中,js获取后台model传递过来的对象很重要,这对减少数据库表操作代码的工作量,以及使前台开发更具灵活行怎么强调也不过分。...本例是js获取后台通过model传过来的数组列表,希望对同人们有所帮助。
javascript控制语句函数、数组ppt
主要介绍了JavaScript合并两个数组并去除重复项的方法,涉及javascript操作数组的合并与去重的相关技巧,需要的朋友可以参考下
JavaScript中 对象、数组的使用