簡體   English   中英

如何根據某些條件在數組內的對象中增加變量?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM