我是编码和javascript的新手(4周),如果这很基础,请原谅我。
我正在创建一个Disc Golf得分跟踪器Web应用程序,该应用程序的工作方式如下:您输入课程,球员名称和得分,并在提交后创建一个记分卡并将其输出到页面。从那里,我希望它确定每个回合的获胜者是谁,然后为所有可用的计分卡计算赢/输比率,然后将其输出到排行榜。
我坚持要更改对象数组中获胜/失败变量的值。
我要更改此设置的想法是,在提交每个记分卡时,先将其放入本地存储中。我试图使用如下条件语句,但它们似乎不起作用。是否应该在单独的功能中完成?我目前正在创建对象数组,然后创建这些变量,然后是下面的条件语句。这是顺序错误吗?我已经坚持了一段时间,只能弄清楚我在做什么错。
let scoreOneInput = scorecardInput[1].score;
let winOne = scorecardInput[1].win;
let lossOne = scorecardInput[1].loss;
let scoreTwoInput = scorecardInput[2].score;
let winTwo = scorecardInput[2].win;
let lossTwo = scorecardInput[2].loss;
if (scoreOneInput <= scoreTwoInput) {
winOne++;
};
function submitScorecard() {
let scorecardInput = [
{
courseName: course
},
{
name: playerOne,
score: scoreOne,
win: 0,
loss: 0
},
{
name: playerTwo,
score: scoreTwo,
win: 0,
loss: 0
},
{
name: playerThree,
score: scoreThree,
win: 0,
loss: 0
},
{
name: playerFour,
score: scoreFour,
win: 0,
loss: 0
},
{
name: playerFive,
score: scoreFive,
win: 0,
loss: 0
}
];
if (localStorage.getItem('scorecard') === null) {
let scorecard = [];
scorecard.push(scorecardInput);
localStorage.setItem('scorecard', JSON.stringify(scorecard));
} else {
let scorecard = JSON.parse(localStorage.getItem('scorecard'));
scorecard.push(scorecardInput);
localStorage.setItem('scorecard', JSON.stringify(scorecard));
}
}
答案 0 :(得分:2)
数字通过javascript中的引用传递,这意味着每个变量都有自己的唯一实例。更改一个不会更改另一个。
例如:
let a = 1
let b = a
a++
console.log(a) //=> 2
console.log(b) //=> 1
您需要将新编号分配回数据结构中:
if (scoreOneInput <= scoreTwoInput) {
scorecardInput[2].win = scorecardInput[2].win + 1;
};
或者您可以直接在记分卡对象上增加数字:
if (scoreOneInput <= scoreTwoInput) {
scorecardInput[2].win++;
};
答案 1 :(得分:0)
我认为您必须计算一轮的最高分数。您不应该只比较两个分数。因此,首先,您必须重新组织您的ScorecardInput:
let scorecardInput = [
courseName: course
players: [
{
name: playerOne,
score: scoreOne,
win: 0,
loss: 0
},
{
name: playerTwo,
score: scoreTwo,
win: 0,
loss: 0
},
...
]
];
然后,您可以计算最高得分并增加该玩家的获胜次数:
scorecardInput.players = scorecardInput.players.map(function(player) {
if(player.score == Math.max.apply(Math,scorecardInput.players.map(function(p) {
return p.score;
})))
player.win++;
return player;
})
}
);