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

JavaScript:找出对象内所有数组公共元素的最优高效方法

找出对象中所有数组的共同元素的最优快速方法

问题场景

给定一个包含多个数组的对象:

const x = {
    c: ['Full_Name', 'Last_Name', 'Email', 'Organizations', 'MISC', 'UNIQUEID'],
    small: ['Title', 'Organizations', 'URL', 'UNIQUEID'],
    // 可包含更多数组
};

需要找出所有数组中都存在的元素,示例结果为 ['Organizations', 'UNIQUEID']。

最优高效解法:统计元素出现次数

核心思路是:统计每个元素在不同数组中出现的次数,若次数等于对象中数组的总数量,说明该元素在所有数组中都存在。

代码实现

const x = {
    c: ['Full_Name', 'Last_Name', 'Email', 'Organizations', 'MISC', 'UNIQUEID'],
    small: ['Title', 'Organizations', 'URL', 'UNIQUEID'],
    extra: ['Age', 'Organizations', 'UNIQUEID', 'Location']
};

// 1. 统计每个元素在不同数组中的出现次数(先对单个数组去重,避免重复元素干扰)
const countMap = Object.values(x).reduce((map, arr) => {
    const uniqueItems = new Set(arr);
    uniqueItems.forEach(item => {
        map.set(item, (map.get(item) || 0) + 1);
    });
    return map;
}, new Map());

// 2. 获取对象中数组的总数量
const totalArrayCount = Object.values(x).length;

// 3. 筛选出出现次数等于数组总数的元素
const commonElements = Array.from(countMap.entries())
    .filter(([_, count]) => count === totalArrayCount)
    .map(([item]) => item);

console.log(commonElements); // 输出:['Organizations', 'UNIQUEID']

方法优势

  • 时间复杂度低:仅需遍历所有数组元素一次,整体复杂度为O(N)(N为所有数组的元素总个数),比多次求交集的方法更高效。
  • 鲁棒性强:自动处理单个数组内的重复元素,避免误统计。

备选方案:基准数组求交集

如果数组数量较少,也可以用第一个数组作为基准,依次与后续数组求交集:

const arrays = Object.values(x);
if (arrays.length === 0) {
    console.log([]);
    return;
}

// 以第一个数组为基准,转成Set提升查询效率
let commonSet = new Set(arrays[0]);

for (let i = 1; i < arrays.length; i++) {
    const currentSet = new Set(arrays[i]);
    // 保留两个集合的交集
    commonSet = new Set([...commonSet].filter(item => currentSet.has(item)));
    // 交集为空时提前终止循环
    if (commonSet.size === 0) break;
}

const commonElements = Array.from(commonSet);
console.log(commonElements);

这种方法逻辑直观,但当数组数量多、元素量大时,效率不如统计次数的方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 05:03:27