【问题标题】:array within a switch javascript开关javascript中的数组
【发布时间】:2016-03-04 21:56:13
【问题描述】:

不久前,我需要帮助进行复杂的切换,但现在我将直接变量替换为数组。我认为最好使用 for 语句,它不显示结果。

这对我来说是一个附带项目,所以如果您认为有任何方面可以改进,请告诉我。

<script>
var strMod=0;
var dexMod=0;
var conMod=0;
var intMod=0;
var wisMod=0;
var chaMod=0;

var strength = prompt("what is your strength?");
var dexterity = prompt("what is your dexterity?");
var constitution = prompt("what is your constitution?");
var intelligence = prompt("what is your intelligence?");
var wisdom = prompt("what is your wisdom?");
var charisma = prompt("what is your charisma?");

var abilities=[strength,dexterity,constitution,intelligence,wisdom,charisma];
var abiMod=[strMod,dexMod,conMod,intMod,wisMod,chaMod];


for (var i=0; i<abilities.length;i++){
switch(true){
    case (abilities(i)>=0 && abilities(i)<2 && abilities(i)!==null):
        abiMod(i)=-5;
        break;
    case (abilities(i)>=2 && abilities(i)<4):
        abiMod(i)=-4;
        break;
    case (abilities(i)>=4 && abilities(i)<6):
        abiMod(i)=-3;
        break;
    case (abilities(i)>=6 && abilities(i)<8):
        abiMod(i)=-2;
        break;
    case (abilities(i)>=8 && abilities(i)<10):
        abiMod(i)=-1;
        break;
    case (abilities(i)>=10 && abilities(i)<12):
        abiMod(i)=0;
        break;
    case (abilities(i)>=12 && abilities(i)<14):
        abiMod(i)=1;
        break;
    case (abilities(i)>=14 && abilities(i)<16):
        abiMod(i)=2;
        break;
    case (abilities(i)>=16 && abilities(i)<18):
        abiMod(i)=3;
        break;
    case (abilities(i)>=18 && abilities(i)<20):
        abiMod(i)=4;
        break;
    case (abilities(i)>=20 && abilities(i)<22):
        abiMod(i)=5;
        break;
    default:
        abiMod(i)= prompt("what is your"+ abilities(i) +"modifier?");
        break;
};
alert(abiMod(i));
};
</script>

【问题讨论】:

  • 你不能分配给像abiMod(i)=-5;这样的函数调用
  • 使用正确的语法访问数组abilities[i]abiMod[i]的元素。此外,您解决问题的代码看起来很奇怪。
  • 然后检查你的 Javascript 控制台,它可能会报告语法错误。
  • 感谢 quantastical 和 Alexandre 的更正。巴尔玛 你的意思是什么?我正在进入桌面游戏,我懒得做基本的算术,并且将开发一个家庭网站来记录字符数据,因此拥有能够查看单个数组变量的标准开关将有助于简化代码.我也想过把开关变成一个函数,但不知道如何相应地调整变量。
  • A javascript introthis one instead 将是一个不错的起点。

标签: javascript arrays switch-statement


【解决方案1】:

除了使用 switch 语句,所有案例都有一个共同的主题,因此可以使用数学公式。

这是修改后的代码

for (var i = 0; i < abilities.length; i++) {
    if (abilities[i] !== null && abilities[i] >= 0 && abilities[i] < 22) {
       abiMod[i] = Math.floor(abilities[i] / 2) - 5;
    }
    else {
        abiMod[i] = prompt("what is your "+ abilities[i] +" modifier?");
    }
};

【讨论】:

  • 约翰,这看起来简单多了。我需要了解有关 Math.floor 的更多信息,这是第二次提出建议(最后一次是专门与开关有关)。感谢您的建议。另一方面,在修正索引调用者的情况下,该开关确实有效。
  • 又看了一遍,你是对的,所以我删除了那部分。如果您使用带常量的开关而不是带变量的开关,最好将其作为 IF 语句。
  • 看看我将尝试用这个方程做什么(这使它成为一个在整个代码中定期使用的函数)如果我使用一个像这样的方程是最好的你在上面做的。谢谢你的建议!
  • 在函数中放置类似的方程是有意义的。如果您将来需要调整方程式,那么您只需在一处更改,而不是全部更改。
  • 这就是我的想法,约翰。我打算根据未来对主要变量的调整重用这个修饰符计算。
【解决方案2】:

对于初学者,您需要通过括号而不是括号来访问数组索引。

for (var i=0; i<abilities.length;i++){
switch(true){
    case (abilities[i]>=0 && abilities[i]<2 && abilities[i]!==null):
        abiMod[i]=-5;
        break;
    case (abilities[i]>=2 && abilities[i]<4):
        abiMod[i]=-4;
        break;
    case (abilities[i]>=4 && abilities[i]<6):
        abiMod[i]=-3;
        break;
    case (abilities[i]>=6 && abilities[i]<8):
        abiMod[i]=-2;
        break;
    case (abilities[i]>=8 && abilities[i]<10):
        abiMod[i]=-1;
        break;
    case (abilities[i]>=10 && abilities[i]<12):
        abiMod[i]=0;
        break;
    case (abilities[i]>=12 && abilities[i]<14):
        abiMod[i]=1;
        break;
    case (abilities[i]>=14 && abilities[i]<16):
        abiMod[i]=2;
        break;
    case (abilities[i]>=16 && abilities[i]<18):
        abiMod[i]=3;
        break;
    case (abilities[i]>=18 && abilities[i]<20):
        abiMod[i]=4;
        break;
    case (abilities[i]>=20 && abilities[i]<22):
        abiMod[i]=5;
        break;
    default:
        abiMod[i]= prompt("what is your"+ abilities[i] +"modifier?");
        break;
};
alert(abiMod[i]);
};
</script>

【讨论】:

  • 感谢您的纠正。现在我要让它变得更复杂,但如果有人看到我可以做不同的事情,我很乐意通过学习新东西来改进。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-09
  • 2013-07-11
  • 2019-07-02
  • 2022-01-16
  • 2013-02-01
  • 2017-03-25
  • 1970-01-01
相关资源
最近更新 更多