[英]How can I increment a variable within an object that is within an array based on certain conditions?
我是編碼和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));
}
}
數字是通過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++;
};
我認為您必須計算一輪的最高分數。 您不應該只比較兩個分數。 因此,首先,您必須重新組織您的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;
})
}
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.