Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何根据特定条件在数组中的对象中增加变量?_Javascript - Fatal编程技术网

Javascript 如何根据特定条件在数组中的对象中增加变量?

Javascript 如何根据特定条件在数组中的对象中增加变量?,javascript,Javascript,我对编码和javascript是全新的(4周),所以如果这是非常基本的,请原谅我 我正在创建一个Disc Golf score tracker web应用程序,它的工作原理如下:输入球场、球员姓名和分数,然后在提交时,它创建一个记分卡并将其输出到页面。从那里,我希望它能够确定每一轮的赢家,然后计算所有可用记分卡的赢家/输家比率,然后将其输出到排行榜 我一直在修改对象数组中赢/输变量的值 我改变这一点的想法是,在提交每个记分卡时,在将其放入本地存储之前,让它发生。我尝试过使用下面这样的条件语句,但

我对编码和javascript是全新的(4周),所以如果这是非常基本的,请原谅我

我正在创建一个Disc Golf score tracker 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));
  }
}
让scoreOneInput=scorecardInput[1]。分数;
让winOne=scorecardInput[1]。赢;
设lossOne=scorecardInput[1]。损失;
让scoreTwoInput=记分卡输入[2]。分数;
让winTwo=scorecardInput[2]。win;
设lossTwo=输入[2]。损失;

如果(scoreOneInput数字在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我认为你必须计算一轮中的最高分数。你不应该只比较两个分数。因此,首先,你必须重新组织你的记分卡输入:

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

代码看起来不完整。您正在使用未定义的
scorecardInput
。您有完整的示例吗?很抱歉,我试图修剪代码,但弄糟了,Alex已经回答了。谢谢!我还没有学习有关数学对象的任何内容,我将检查它。谢谢!
   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;
      })
    }
  );