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

Pokédex应用:双属性宝可梦伤害类型去重与计算问题求助

解决双属性宝可梦伤害类型计算:提取2倍/半倍伤害类型

核心逻辑梳理

双属性宝可梦的伤害倍率是两个属性克制关系的叠加,你已经搞定了4倍、1/4倍、无伤害和1倍的判定,剩下的2倍/半倍只需要基于已有的归类结果做集合过滤:

  • 2倍伤害:仅被其中一个属性克制的类型(即两个属性double_damage_from的并集,排除掉已归类的其他倍率类型)
  • 半倍伤害:仅被其中一个属性抵抗的类型(即两个属性half_damage_from的并集,排除掉已归类的其他倍率类型)

代码实现示例(以JavaScript为例)

假设你已经从PokeAPI拿到了两个属性的完整数据,并且已经得到了以下已归类的类型集合:

// 两个属性的原始数据
const attr1 = /* 第一个属性的API返回数据 */;
const attr2 = /* 第二个属性的API返回数据 */;

// 已实现的归类结果(用Set存储,方便快速查询)
const quadrupleDamage = new Set(
  attr1.double_damage_from.map(t => t.name).filter(type => 
    attr2.double_damage_from.some(t => t.name === type)
  )
);
const quarterDamage = new Set(
  attr1.half_damage_from.map(t => t.name).filter(type => 
    attr2.half_damage_from.some(t => t.name === type)
  )
);
const noDamage = new Set([
  ...attr1.no_damage_from.map(t => t.name),
  ...attr2.no_damage_from.map(t => t.name)
]);
const normalDamage = new Set(/* 你已实现的1倍伤害类型集合 */);

提取2倍伤害类型

// 合并两个属性的double_damage_from,去重
const combinedDoubleSources = new Set([
  ...attr1.double_damage_from.map(t => t.name),
  ...attr2.double_damage_from.map(t => t.name)
]);

// 过滤掉所有已归类的类型,剩下的就是2倍伤害类型
const doubleDamage = [...combinedDoubleSources].filter(type => 
  !quadrupleDamage.has(type) &&
  !quarterDamage.has(type) &&
  !noDamage.has(type) &&
  !normalDamage.has(type)
);

提取半倍伤害类型

// 合并两个属性的half_damage_from,去重
const combinedHalfSources = new Set([
  ...attr1.half_damage_from.map(t => t.name),
  ...attr2.half_damage_from.map(t => t.name)
]);

// 同样过滤已归类类型,得到半倍伤害类型
const halfDamage = [...combinedHalfSources].filter(type => 
  !quadrupleDamage.has(type) &&
  !quarterDamage.has(type) &&
  !noDamage.has(type) &&
  !normalDamage.has(type)
);

关键说明

  • 用Set处理集合操作可以避免重复类型,同时提升查询效率
  • 2倍伤害的本质是仅被单个属性克制,所以要排除掉被两个属性同时克制的4倍类型,以及其他已明确归类的类型
  • 半倍伤害同理,是仅被单个属性抵抗,排除掉被两个属性同时抵抗的1/4倍类型即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 05:25:23