在关联数组中创建一个对象(如果它不存在),然后引用它

时间:2014-06-14 03:32:50

标签: javascript

我尝试创建一个函数,只检查用户输入的名称是否存在关联数组,然后引用该位置,如果没有,则创建对象,然后引用该位置。

我虽然拥有它,但是当我的代码尝试更改某个值时,例如player1.ptsWin = 2;,它会给我一个控制台错误,指出ptsWin未定义。

function verifyPlayer1(name) {
    var foundPlayer = false;
    for (i = 0; i < player.length; i++) {
        if (player[i].name === name) {
            player1 = player[i];
            foundPlayer = true;
            break;
        }
        if (foundPlayer === false) {
            player[player.length] = {
                name: name,
                points: 0,
                ptsWin: 0,
                ptsLose: 0,
                ptsTie: 0,
                gamesWon: 0,
                gamesLost: 0,
                gamesTied: 0,
                sequence: [],
                correct: false
            };

            player1 = player[player.length - 1];

        }
    }
}

1 个答案:

答案 0 :(得分:0)

您似乎正在检查循环中的found ,这是一个非常严重的逻辑问题。

您需要完成循环,然后检查。另外,不要为第二个变量(found)烦恼,只需检查player是否设置好。另外,也不要打扰length,只需push到阵列上。

function verifyPlayer1(name) {
    var player1;
    for (i = 0; i < player.length; i++) {
        if (player[i].name === name) {
            player1 = player[i];
            break;
        }
    }

    if (!player1) {
        player1 = {
            name: name,
            points: 0,
            ptsWin: 0,
            ptsLose: 0,
            ptsTie: 0,
            gamesWon: 0,
            gamesLost: 0,
            gamesTied: 0,
            sequence: [],
            correct: false
        };
        player.push(player1)
    }

    return player1;
}

您似乎也在使用全局(player1)来退回播放器。你不应该这样做。而是从功能中返回播放器。