【问题标题】:For loop - 2 arraysFor 循环 - 2 个数组
【发布时间】:2015-06-11 15:40:13
【问题描述】:

我是一个初学者,我已经被困了好几个小时了。我有一个简单的 for 循环的问题。我想要一个警报框,它可以为我提供玩家控制的条形图的总和(它是简单棋盘游戏代码的一部分)

这是我的代码:

    var districts = [{bars:0}, {bars:2}, {bars:2}, {bars:3}, {bars:0}, {bars:3}]; //these are all the districts in the game + the amount of bars on them
    var PlayerControlledDistricts = [districts[0], districts[2], districts[3]]; //these are the 3 districts the player controlls
    var AmountOfBars = 0;
    for (i = 0; i <=PlayerControlledDistricts.length; i++){
             AmountOfBars += parseInt(PlayerControlledDistricts[i].bars, 10);
             }
    alert(AmountOfBars);

这段代码有什么问题?如果我在 for 循环中放置一个警报框,我会得到:0、2、5 - 所以我想在循环中一切都很好 - 但是一旦我将警报框放在循环之外,什么都没有发生......

【问题讨论】:

  • 你不需要parseInt,因为你已经有号码了。
  • for (i = 0; i &lt;PlayerControlledDistricts.length; i++) - 因为数组从 0 开始,长度从 1 开始,所以只需要计数到 PlayerControlledDistricts.length

标签: javascript arrays for-loop sum


【解决方案1】:

问题是你循环一个太多元素,使用&lt;而不是&lt;=

var districts = [{bars:0}, {bars:2}, {bars:2}, {bars:3}, {bars:0}, {bars:3}]; //these are all the districts in the game + the amount of bars on them
var PlayerControlledDistricts = [districts[0], districts[2], districts[3]]; //these are the 3 districts the player controlls
var AmountOfBars = 0;
for (i = 0; i < PlayerControlledDistricts.length; i++){
         AmountOfBars += parseInt(PlayerControlledDistricts[i].bars, 10);
}
alert(AmountOfBars);

Here is a working example


正如@Jamiec 指出的那样,您实际上不需要解析数字,因为您已经将它作为数字,所以只需这样做:

AmountOfBars += PlayerControlledDistricts[i].bars;

【讨论】:

  • 去掉parseInt OP 不需要它
  • 确实如此,我将作为建议添加
【解决方案2】:

您需要使用&lt; 而不是&lt;=

var districts = [{bars:0}, {bars:2}, {bars:2}, {bars:3}, {bars:0}, {bars:3}]; //these are all the districts in the game + the amount of bars on them
var PlayerControlledDistricts = [districts[0], districts[2], districts[3]]; //these are the 3 districts the player controlls
var AmountOfBars = 0;
for (i = 0; i < PlayerControlledDistricts.length; i++) {
  debugger;
  AmountOfBars += parseInt(PlayerControlledDistricts[i].bars, 10);
}
alert(AmountOfBars);

【讨论】:

    【解决方案3】:

    将你的 for 更改为:

    for (i = 0; i < PlayerControlledDistricts.length; i++)`
    

    这是因为数组从 0 开始,长度从 1 开始,您只需要数到 PlayerControlledDistricts.length,因为 PlayerControlledDistricts.length 本身比数组本身的索引高 1。

    【讨论】:

      【解决方案4】:

      问题在于你的迭代——你正在迭代到i &lt;=PlayerControlledDistricts.length,这比你需要的多一个,所以最终在最后一个未定义的循环上要求PlayerControlledDistricts[3]。您也不需要parseInt,因为您已经有了一个数值。这是一个使用 console.log 的工作示例:

      var districts = [{bars:0}, {bars:2}, {bars:2}, {bars:3}, {bars:0}, {bars:3}]; //these are all the districts in the game + the amount of bars on them
      var PlayerControlledDistricts = [districts[0], districts[2], districts[3]]; //these are the 3 districts the player controlls
      var AmountOfBars = 0;
      for (i = 0; i < PlayerControlledDistricts.length; i++) {
               AmountOfBars += PlayerControlledDistricts[i].bars;
      }
      console.log(AmountOfBars);
      

      JSFiddle:http://jsfiddle.net/eofbenw2/

      【讨论】:

        【解决方案5】:

        数组的索引是问题,因为记住数组的元素应该是 0..... 到 n-1,因为长度属性有 n 个元素。 所以如果你有一个包含 10 个元素的数组,那么长度将为 10,并且元素存储在 0 到 9 之间。

        之后,最好使用 var for(var i=0;condition;increment); 初始化循环 for

        另外你不需要转换。

        我可以建议您使用Console.log 方法来验证信息和对象,该控制台打印在您的 Web 浏览器的控制台中(您可以在控制台选项卡中使用 F12 观看)。

        var districts = [{bars:0}, {bars:2}, {bars:2}, {bars:3}, {bars:0}, {bars:3}]; //these are all the districts in the game + the amount of bars on them
        var PlayerControlledDistricts = [districts[0], districts[2], districts[3]]; //these are the 3 districts the player controlls
        var AmountOfBars = 0;
        for (var i = 0; i <PlayerControlledDistricts.length; i++)
                AmountOfBars += PlayerControlledDistricts[i].bars;
        
        alert(AmountOfBars);
        

        问候

        【讨论】:

          猜你喜欢
          • 2018-11-26
          • 1970-01-01
          • 2021-11-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-18
          • 1970-01-01
          相关资源
          最近更新 更多