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

API调用去重咨询:如何避免重复名称及filter用法验证

问题分析与修正方案

你的核心需求是避免重复名称同时出现在takes2xBucket和times4xBucket两个数组中,原代码里的filter用法完全错误——filter需要传入一个返回布尔值的回调函数,直接传字符串的写法根本无法实现去重检查。

原代码的问题点

  1. times4xBucket.filter(doubleNames[i].name) 语法逻辑双错误,filter的参数必须是回调函数,这里的写法既不符合语法要求,也达不到检查重复的目的。
  2. 仅收集takes2xBucket的名称,未同步检查times4xBucket的已有名称,可能导致新元素重复进入目标桶。

修正后的代码实现

我们可以用Set来存储两个桶里已有的所有名称,利用Set的has方法快速判断名称是否已存在,同时简化逻辑:

fetch(typeURL2)
  .then(response2 => response2.json())
  .then(data2 => {
    const type2takes2x = data2.damage_relations.double_damage_from;
    // 收集两个桶里已有的所有名称,用Set提升查询效率
    const existingNames = new Set([
      ...takes2xBucket.map(item => item.name),
      ...times4xBucket.map(item => item.name)
    ]);
    // 单独提取takes2xBucket的名称集合,用于原逻辑判断
    const takes2xNameSet = new Set(takes2xBucket.map(item => item.name));

    for (const item of type2takes2x) {
      const itemName = item.name;
      // 先检查名称是否已存在,避免重复添加
      if (existingNames.has(itemName)) continue;

      // 按原逻辑分类:已在takes2xBucket的放入times4xBucket,否则放入takes2xBucket
      if (takes2xNameSet.has(itemName)) {
        times4xBucket.push(item);
      } else {
        takes2xBucket.push(item);
      }
      // 将新加入的名称存入Set,防止后续重复处理
      existingNames.add(itemName);
    }
  });

优化说明

  • 用Set替代数组includes,查询时间复杂度从O(n)降到O(1),数据量大时性能更优。
  • 先统一检查所有已存在的名称,确保同一个名称不会出现在两个桶中,也不会在单个桶内重复。
  • 用for...of替代传统for循环,代码更简洁易读。

如果你的逻辑需要调整,只需修改分类判断的条件即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 23:55:22