JavaScript REST函数多参数传入后输出数组重复问题求助
嘿,我看你遇到了传入多个剧集ID后结果数组重复的问题,这大概率是循环逻辑或者重复添加的问题导致的。咱们来一步步解决它:
首先,先分析你现有代码的问题:你用了两层嵌套循环,遍历每个传入的ID,再遍历所有剧集。如果同一个剧集匹配到多个ID(虽然可能性低),或者你的逻辑里没做去重,就可能导致重复添加;另外,如果调用函数时不小心重复执行了,也会出现数组重复的情况。
接下来给你两种优化方案,都能解决重复的问题,还能提升效率:
方案一:用Set去重,一次遍历搞定
let episodeData = bigEpisodeData._embedded.episodes; const searchEpisode = (...epiIds) => { const foundIds = new Set(); // 用来记录已经添加过的剧集ID,避免重复 const episodeArray = []; // 只遍历一次所有剧集,匹配所有传入的ID for (const currentEpisode of episodeData) { // 检查当前剧集ID是否在目标列表里,且还没被添加过 if (epiIds.includes(currentEpisode.id) && !foundIds.has(currentEpisode.id)) { // 提取你需要的剧集信息 const epiInfo = { id: currentEpisode.id, name: currentEpisode.name, airDate: currentEpisode.air_date // 按需添加其他字段 }; episodeArray.push(epiInfo); foundIds.add(currentEpisode.id); } } return episodeArray; };
方案二:用Map做预映射,查找更高效
如果剧集数据量比较大,这种方法会更高效,因为查找ID的速度是O(1):
let episodeData = bigEpisodeData._embedded.episodes; // 先把剧集转成以ID为键的Map,提前做一次映射 const episodeMap = new Map(episodeData.map(ep => [ep.id, ep])); const searchEpisode = (...epiIds) => { const episodeArray = []; // 遍历传入的每个ID,直接从Map里取对应的剧集 for (const id of epiIds) { const episode = episodeMap.get(id); if (episode) { // 确保ID对应的剧集存在 const epiInfo = { id: episode.id, name: episode.name, // 其他需要的字段 }; episodeArray.push(epiInfo); } } return episodeArray; };
最后还要检查下你调用函数的方式,别犯这种小错误:
// ❌ 错误:重复调用函数导致数组重复 const wrongResult = [...searchEpisode(101, 102), ...searchEpisode(101, 102)]; // ✅ 正确:只调用一次,传入所有需要的ID const correctResult = searchEpisode(101, 102);
这样处理后,不管你传入多少个ID,结果数组里只会保留每个匹配剧集的一次记录啦。
内容的提问来源于stack exchange,提问作者Parth Koshta
相关产品推荐
相关产品推荐

