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

如何根据选中的标签数组筛选从GitHub API获取的项目数据

原代码问题说明

  1. 你用map遍历标签返回的是布尔数组,filter只要收到非假值就会保留项目,布尔数组永远为真,所以会返回全部数据。
  2. includes的调用主体搞反了,你是要判断当前标签是否在选中数组selected里,应该是selected.includes(topic)而不是反过来。

正确实现

分两种常用的筛选场景:

场景1:只要项目包含任意一个选中标签就返回(最常用的标签筛选逻辑)

const filteredData = userData.filter(item => 
  item.topics.some(topic => selected.includes(topic))
);

这里用到Array.some()方法,只要当前项目的topics里有一个标签存在于selected数组中,就会返回true保留该项目。

场景2:项目必须包含所有选中标签才返回

如果你的筛选逻辑是要求同时命中所有选中的标签,就换成Array.every()方法:

const filteredData = userData.filter(item => 
  selected.every(topic => item.topics.includes(topic))
);

性能优化方案

如果项目数据量较大、或者选中标签数量多,可以把selected数组转成Set实例,查找效率更高:

const selectedSet = new Set(selected);
const filteredData = userData.filter(item => 
  item.topics.some(topic => selectedSet.has(topic))
);

内容的提问来源于stack exchange,提问作者Cristian Müller

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:06:08