我尝试创建一个函数,只检查用户输入的名称是否存在关联数组,然后引用该位置,如果没有,则创建对象,然后引用该位置。
我虽然拥有它,但是当我的代码尝试更改某个值时,例如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];
}
}
}
答案 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
)来退回播放器。你不应该这样做。而是从功能中返回播放器。