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

JavaScript中按name字段处理三数组交集问题求助

问题解决:正确获取数组交集并过滤目标数组

你的代码用了两次map,但map的作用是转换每个元素并返回新数组,所以得到的是布尔值组成的二维数组,而非你需要的交集name集合。下面是正确的实现方案:

步骤拆解

  1. 提取array1的所有name并转为Set(提升后续查找效率)
  2. 从array2中筛选出name存在于array1集合中的元素,得到两者的交集name列表
  3. 用交集name列表过滤array3,保留匹配的元素

完整代码

const array1 = [{ name: 'John' }];
const array2 = [{ name: 'Elisa' }, { name: 'John' }];
const array3 = [{ name: 'Elisa', age: 10 }, { name: 'John', age: 23 }, { name: 'Maria', age: 30 }];

// 1. 提取array1的name集合
const array1Names = new Set(array1.map(item => item.name));

// 2. 找出array2与array1的交集name(自动去重)
const intersectNames = [...new Set(array2.filter(item => array1Names.has(item.name)).map(item => item.name))];

// 3. 过滤array3,保留name在交集内的元素
const filteredArray = array3.filter(item => intersectNames.includes(item.name));

console.log(filteredArray); // 输出: [{ name: 'John', age: 23 }]

代码说明

  • 用Set存储array1的name,因为Set.has()的查找时间复杂度为O(1),比数组includes()更高效
  • 交集name用new Set去重,避免array2中存在重复name的情况
  • 最后用array3.filter()直接筛选符合条件的元素,这才是实现过滤需求的正确方法(而非map)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 13:20:30