gpt4 book ai didi

javascript - 在 JavaScript 变量中查找最高值

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:03:11 25 4
gpt4 key购买 nike

我正在开发一个基于 JS 的游戏,我在其中跟踪多个用户的分数。游戏结束时,我需要宣布获胜者。可能有联系。

所以,两个例子:

player1 = 3
player2 = 5
player3 = 4

(玩家 2 获胜)

player1 = 4
player2 = 2
player3 = 4

(玩家 1 和 3 并列)

只有 3 个玩家,我可能只用一堆嵌套的 if/elses 将每个值相互比较来做到这一点,但我想知道是否有更优雅的方法来解决这个问题......特别是在这样的情况下例如,您可能有 10 个玩家,其中 if/else 比较会很快变得笨拙。

一个选项似乎是将值放在一个数组中,然后对其进行排序,但这并没有为您提供变量名——只是提供了值。然后我可以做一个多维数组,但那时事情似乎又变得一团糟了。

最佳答案

如果不使用 eval() 或要求这些变量是全局变量,这通常是一种糟糕的方式。

如果它们是全局变量,您可以使用这个 hack,但我建议使用下面的第二种方法,它将玩家信息存储为对象数组。这是一个使用全局变量的 hack(不推荐,但更直接地回答你的问题):

// these must be global variables
var score1 = 100;
var score2= 99;
var score3= 80;

function findHighScore() {

var highestScore = score1;
var highestScorePlayerNum = 1;
var tempScore;

for var (i = 2; i <= 3; i++) {
// this works only because the score variables are global variables which
// can be accessed as properties off the window object
tempScore = window["score" + i];
if (tempScore > highestScore) {
highestScore = tempScore;
highestScorePlayerNum = i;
}
}
return {score: highestScore, playerNum: highestScorePlayerNum};
}

更好的方法是不将每个玩家的分数保存在自己的 javascript 变量中,而是将其放入一个对象数组中,如下所示:

var playerData = [
{name: "John", highScore: 145, lastPlayed: 23089234},
[name: "Bill", highScore: 99, lastPlayed: 59383945}
];

然后,您可以遍历玩家数据,找到最高分并获得该玩家的名字。

function findHighScore() {
var highScoreSoFar = 0;
var result;
for (var i = 0; i < playerData.length; i++) {
if (playerData[i].highScore > highScoreSoFar) {
result = playerDatra[i];
highScoreSoFar = playerData[i].highScore;
}
}
return result;
}

var highPlayer = findHighScore();
alert("Highest scoring player is " + highPlayer.name + " with a score of " + highPlayer.highScore);

如果您想返回所有得分最高的玩家,您可以返回得分最高的玩家数组:

function findHighScore() {
var highScoreSoFar = 0;
var result = [];
for (var i = 0; i < playerData.length; i++) {
if (playerData[i].highScore > highScoreSoFar) {
// new high score so start a new array with this player in it
result = [playerData[i]];
highScoreSoFar = playerData[i].highScore;
} else if (playerData[i].highScore === highScoreSoFar) {
// more than one player with this highScore so add this one to the array
result.push(playerData[i]);
}
}
return result;
}

关于javascript - 在 JavaScript 变量中查找最高值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16095301/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com