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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:26:51