Javascript 如何根据特定条件在数组中的对象中增加变量?
我对编码和javascript是全新的(4周),所以如果这是非常基本的,请原谅我 我正在创建一个Disc Golf score tracker web应用程序,它的工作原理如下:输入球场、球员姓名和分数,然后在提交时,它创建一个记分卡并将其输出到页面。从那里,我希望它能够确定每一轮的赢家,然后计算所有可用记分卡的赢家/输家比率,然后将其输出到排行榜 我一直在修改对象数组中赢/输变量的值 我改变这一点的想法是,在提交每个记分卡时,在将其放入本地存储之前,让它发生。我尝试过使用下面这样的条件语句,但它们似乎不起作用。这应该在单独的功能中完成吗?我目前正在创建对象数组,然后创建这些变量,然后是下面的条件语句。这个顺序不对吗?我已经在这上面呆了一段时间了,我能找出我做错了什么Javascript 如何根据特定条件在数组中的对象中增加变量?,javascript,Javascript,我对编码和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;
})
}
);