javascript - 嵌套 'for' 循环 - 数组未定义

标签 javascript

我正在开发一个 JS,我想创建一个简单的游戏,首先选择玩家数量、每个玩家的姓名以及玩家是否是庄家。每场比赛只能有一名荷官:

function player(playerName, playerDealer) {
    this.playerName = playerName;
    this.playerDealer = playerDealer;

}
var playerNumber = prompt('Nr of players?');
var playersArray = [];
for (i = 0; i < playerNumber; i++) {
        var j = i + 1;    

        var dealerAssigned = false; // control variable to check whether dealer has been assigned
        var inputName = prompt('Name of player nr  ' + j);
        var inputDealer = prompt('Is player ' + inputName + ' also a dealer? (yes/no)');
        playersArray[i] = new player(inputName, inputDealer);

        for (k=0;k<playerNumber;k++){ // I want to go through the players array to check if dealer has been assigned
        if (playersArray[k].playerDealer == 'yes') {
                dealerAssigned=true;    
                break;
              };    
          };

      if(dealerAssigned){ //if dealer has been assigned, don't add the current player to the array and continue with the next iteration
         alert("already assigned"); 
         continue;
            };

     };

我需要在循环中加入一个简单的测试,以检查经销商是否已被指定。如果是这样,我希望脚本只提醒“已分配”并跳到下一个玩家。但是我不断收到以下错误

TypeError: playersArray[k] is undefined

谁能解释为什么它是未定义的?/我做错了什么?

最佳答案

在我看来,您具体询问的错误是您正在迭代未定义的数组值,正如您得到的错误所暗示的那样。

你得到了你想要排队的玩家数量

var playerNumber = prompt('Nr of players?');

然后,您继续进行两次迭代(一个嵌套在另一个迭代中),其中内部循环试图访问尚未分配的值,因为外部循环尚未到达那里:

for (i = 0; i < playerNumber; i++) {
    playersArray[i] = new player(inputName, inputDealer);
    for (k=0; k < playerNumber; k++) {
        if (playersArray[k].playerDealer == 'yes') {
            ...
        }
    }
}

在我看来,这里的逻辑错误是嵌套循环。我建议只在一个循环中初始化所有玩家,然后验证所有玩家都有指定的荷官。

我应该补充一点,我在这里是故意短视的,非常狭隘地关注提出的问题,而忽略了我看到的其他问题。

关于javascript - 嵌套 'for' 循环 - 数组未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28331423/

相关文章:

javascript - 在匹配(正则表达式)中使用变量 JSON 名称

Javascript 模板与服务器模板

javascript - $(this).find ("a").attr ("onclick"); onclick 给出无效字符

javascript - 简单的 ng-click 不起作用

javascript - jsView中引用数组元素

Javascript - 使用 forEach 向后循环遍历数组

javascript - 使用 javascript 动态更改 <select> 选项

javascript - 手动模拟不适用于 Jest

javascript - 为什么当我将变量记录到控制台时我会得到输出,但是当我返回它时,我会收到 "Undefined"

javascript - 具有固定标题和固定第一列的可滚动表格