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

从多维元组数组中提取所有子数组共有的元组首元素的实现方法

从多维元组数组中提取所有子数组共有的元组首元素的实现方法

嘿,我来帮你搞定这个需求!要找出所有子数组里都存在的元组首元素,咱们可以通过集合的交集操作来实现,逻辑简单还高效,下面给你一步步拆解:

核心思路

首先,我们需要把每个子数组里的元组首元素提取出来并去重(毕竟同一个子数组里重复的元素不影响“是否存在”的判断),然后找出所有子数组这些元素集合的交集,这个交集就是所有子数组都共有的首元素啦。

JavaScript 实现代码

const arr = [
    [[2, "a"], [4, "b"], [5, "c"]],
    [[2, "a"], [3, "b"], [4, "c"], [5, "c"]],
    [[1, "a"], [2, "b"], [4, "c"], [5, "d"]]
];

// 第一步:把每个子数组转换为仅包含元组首元素的集合(自动去重)
const elementSets = arr.map(subArray => 
    new Set(subArray.map(tuple => tuple[0]))
);

// 第二步:计算所有集合的交集
const commonFirstElements = [...elementSets.reduce((commonSet, currentSet) => {
    // 过滤出当前公共集合里在当前子数组集合中存在的元素
    return new Set([...commonSet].filter(item => currentSet.has(item)));
})];

console.log(commonFirstElements); // 输出结果:[2, 4, 5]

代码解释

  • 第一步:用map遍历外层数组的每个子数组,对每个子数组再次用map提取元组的第一个元素,然后转成Set。这样做的好处是自动去掉同一个子数组里重复的首元素,比如例子中第二个子数组里的5只会被保留一次,不影响后续的交集判断。
  • 第二步:用reduce来迭代所有集合,初始时把第一个集合作为公共集合的起点,之后每一步都把当前公共集合和下一个子数组的集合取交集——只保留两个集合都有的元素,最后把最终的交集集合转成数组,就是我们要的结果。

边界情况处理

如果你的外层数组是空的,或者某个子数组为空,这段代码会返回空数组,符合逻辑(毕竟没有子数组或者有子数组没有元素的话,不存在“所有子数组共有”的元素)。

备注:内容来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 18:54:33