从多维元组数组中提取所有子数组共有的元组首元素的实现方法
从多维元组数组中提取所有子数组共有的元组首元素的实现方法
嘿,我来帮你搞定这个需求!要找出所有子数组里都存在的元组首元素,咱们可以通过集合的交集操作来实现,逻辑简单还高效,下面给你一步步拆解:
核心思路
首先,我们需要把每个子数组里的元组首元素提取出来并去重(毕竟同一个子数组里重复的元素不影响“是否存在”的判断),然后找出所有子数组这些元素集合的交集,这个交集就是所有子数组都共有的首元素啦。
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
相关产品推荐
相关产品推荐

