如何根据某些条件在数组内的对象中增加变量?

时间:2019-09-12 23:04:06

标签: javascript

我是编码和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));
  }
}

2 个答案:

答案 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;
      })
    }
  );