如何按特殊条件过滤数组:获取含指定number的id对应全部元素
用filter实现目标数据过滤
当然可以用filter实现你的需求,只需分两步处理:先定位出所有包含number=3的id,再筛选出这些id对应的全部元素。
问题分析
你当前的代码仅筛选了number直接等于3的单个元素,但需求是保留所有存在number=3的id下的全部元素——比如id=10和300的所有元素都要保留。
解决方案代码
const data = [{ id: 10, number: 3 }, { id: 10, number: 2 }, { id: 300, number: 1 }, { id: 300, number: 3 }, { id: 40, number: 1 }, { id: 40, number: 2 } ] // 1. 收集所有存在number=3的id(用Set自动去重) const targetIds = new Set( data.filter(item => item.number === 3).map(item => item.id) ); // 2. 过滤出所有id在目标集合中的元素 const filteredData = data.filter(item => targetIds.has(item.id)); console.log(filteredData);
代码说明
- 第一步通过
filter筛选出所有number=3的元素,再用map提取它们的id并存入Set,得到需要保留的id集合(Set会自动去重,避免同一个id重复存储)。 - 第二步再次使用
filter,判断每个元素的id是否在目标id集合中,符合条件的元素会被保留。
输出结果
运行代码后会得到你预期的结果:
[ { id: 10, number: 3 }, { id: 10, number: 2 }, { id: 300, number: 1 }, { id: 300, number: 3 } ]
内容的提问来源于stack exchange,提问作者Tiago Silva
相关产品推荐
相关产品推荐

