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

如何让一个数组的索引关联另一个数组的对应索引?

Hey there! 我明白你现在的需求——用两个平行数组来对应武器和它们的平均伤害,虽然直接通过相同索引关联确实能工作,但这种方式在后续维护时很容易出错(比如添加/删除武器时忘了同步两个数组)。这里给你两种可行的方案,优先推荐第一种:

方案一:用对象数组整合关联数据(推荐)

把每个武器的名称和平均伤害封装成一个独立对象,然后放在同一个数组里,这样每个武器的所有属性都绑定在一起,完全不用担心索引错位的问题:

// 整合后的武器数组,每个元素包含武器的完整信息
const weapons = [
  { name: "Stick", averageDamage: 0 },
  { name: "Dagger", averageDamage: 3 },
  { name: "Shortsword", averageDamage: 6 },
  { name: "Longsword", averageDamage: 9 },
  { name: "Magical Sword", averageDamage: 12 },
  { name: "Chunchunmaru", averageDamage: 15 }
];

使用示例(比如计算怪物生命值场景)

// 假设我们选中了索引1的武器(Dagger)
const activeWeapon = weapons[1];

// 直接通过对象属性获取名称和伤害,进行计算
const monsterCurrentHP = 20;
const damageDealt = activeWeapon.averageDamage; // 这里可以根据需求加计算逻辑,比如暴击系数
const monsterRemainingHP = monsterCurrentHP - damageDealt;

console.log(`使用${activeWeapon.name}攻击后,怪物剩余生命值:${monsterRemainingHP}`);

这种方式的好处是后续扩展性极强——如果之后要给武器加新属性(比如重量、耐久度、攻击速度),直接在对象里新增字段就行,不用再额外创建新的平行数组。


方案二:保留平行数组,封装函数确保索引对应

如果你因为某些原因必须保留原来的两个平行数组,可以封装一个工具函数来帮你自动关联索引,避免手动写错:

// 你的原始数组
var weapon = ["Stick", "Dagger", "Shortsword", "Longsword", "Magical Sword", "Chunchunmaru"];
var weaponAverageDamage = [0, 3, 6, 9, 12, 15];

// 封装函数:根据武器名称或索引获取对应的平均伤害
function getWeaponDamage(weaponIdentifier) {
  let index;
  if (typeof weaponIdentifier === 'number') {
    // 如果传入的是索引,直接使用
    index = weaponIdentifier;
  } else {
    // 如果传入的是武器名称,查找对应的索引
    index = weapon.indexOf(weaponIdentifier);
  }
  
  // 处理索引不存在的情况,返回默认值(这里设为0)
  if (index < 0 || index >= weaponAverageDamage.length) {
    return 0;
  }
  
  return weaponAverageDamage[index];
}

使用示例

// 通过索引获取
const longswordDamage = getWeaponDamage(3); // 对应Longsword的9点伤害
console.log(`Longsword的平均伤害:${longswordDamage}`);

// 通过武器名称获取
const chunchunmaruDamage = getWeaponDamage("Chunchunmaru"); // 15点伤害
console.log(`Chunchunmaru的平均伤害:${chunchunmaruDamage}`);

// 计算怪物生命值场景
const monsterHP = 50;
const currentWeapon = weapon[4]; // Magical Sword
const damage = getWeaponDamage(currentWeapon);
const remainingHP = monsterHP - damage;
console.log(`使用${currentWeapon}攻击后,怪物剩余${remainingHP}点生命值`);

这样就算之后数组有变动,只要维护好这个函数,就能避免手动写索引时出错的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:36:04