如何让一个数组的索引关联另一个数组的对应索引?
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
相关产品推荐
相关产品推荐

