JavaScript多数组求交集的实现逻辑与代码示例

作者:函数茶馆时间:2026-10-28 04:59:12浏览:511

本文介绍在JavaScript中获取多个数组交集的一种特定实现方式。核心思路是先找出元素数量最少的数组作为基准,通过遍历该最小数组并统计元素在其他所有数组中出现的次数,从而筛选出交集元素。文章提供了完整的HTML与JS代码示例,展示了如何从下拉列表获取数据并计算结果。

多数组交集计算思路

在实际项目开发中,有时需要计算多个数组的公共元素(交集)。本例针对特定场景设计,例如假设有三个数组:A数组包含{1000, 10001, 10002, 10003},B数组包含{10002, 10003},C数组包含{10003},目标是找出这三个数组共有的元素。


实现逻辑主要基于性能优化:首先确定一个元素个数最少的数组作为基准(最小数组),其长度即为比较的基准长度。接着遍历所有数组,找出其中长度最短的那个数组。最后,迭代这个最小数组中的每个元素,检查它是否存在于其他所有数组中,通过计数器确认该元素是否在每一个数组中都存在,若存在则判定为交集元素。


该思路虽然简单,但能有效处理多个数组的交集计算。具体实现代码如下:



JavaScript实现代码

完整代码示例如下:

<!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>
作者最新文章