You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

比较3个数组,查找至少在其中2个及全部3个数组中存在的公共元素

实现三个数组中至少两个数组公共元素的获取方案

需求说明

现有fiveBuy、fifteenBuy、thirtyBuy三个数组,需要筛选出至少在其中两个数组中出现过的元素,三个数组共有的元素也需要包含在结果中。

方案1:基于原有嵌套逻辑调整

你原来的三重循环是判断三个元素完全相等,调整判断逻辑为只要满足任意两个相等即可,同时增加去重逻辑避免结果重复:

var buyArray = [];
// 判断fiveBuy和fifteenBuy的公共元素
for (let i = 0; i < fiveBuy.length; i++) {
    const e = fiveBuy[i];
    for (let j = 0; j < fifteenBuy.length; j++) {
        if (e == fifteenBuy[j] && !buyArray.includes(e)) {
            buyArray.push(e);
        }
    }
}
// 判断fiveBuy和thirtyBuy的公共元素
for (let i = 0; i < fiveBuy.length; i++) {
    const e = fiveBuy[i];
    for (let j = 0; j < thirtyBuy.length; j++) {
        if (e == thirtyBuy[j] && !buyArray.includes(e)) {
            buyArray.push(e);
        }
    }
}
// 判断fifteenBuy和thirtyBuy的公共元素
for (let i = 0; i < fifteenBuy.length; i++) {
    const e = fifteenBuy[i];
    for (let j = 0; j < thirtyBuy.length; j++) {
        if (e == thirtyBuy[j] && !buyArray.includes(e)) {
            buyArray.push(e);
        }
    }
}

方案2:计数法(更高效,推荐)

嵌套循环的时间复杂度很高,当数组元素较多时性能很差,用计数统计的方式可以把时间复杂度降到O(n)级别:

// 统计每个元素在多少个独立数组中出现
const countMap = {};
// 统计fiveBuy的元素,用Set去重避免同数组内重复元素多次计数
new Set(fiveBuy).forEach(item => {
    countMap[item] = (countMap[item] || 0) + 1;
});
// 统计fifteenBuy的元素
new Set(fifteenBuy).forEach(item => {
    countMap[item] = (countMap[item] || 0) + 1;
});
// 统计thirtyBuy的元素
new Set(thirtyBuy).forEach(item => {
    countMap[item] = (countMap[item] || 0) + 1;
});
// 筛选出现次数>=2的元素
// 若你的元素都是字符串类型,可以去掉map转换逻辑
const buyArray = Object.entries(countMap)
    .filter(([item, count]) => count >= 2)
    .map(([item]) => isNaN(Number(item)) ? item : Number(item));

注意:以上代码仅适用于元素为数字、字符串等基本类型的数组,如果你的元素是引用类型(对象、数组等),需要自行调整计数的key规则。

内容的提问来源于stack exchange,提问作者user16255767

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 19:24:05