我正在使用javascript构建游戏并生成结果。
var score = array("5", "5", "1");
因此,玩家1得分为5,玩家2得分为5,玩家3得分为1。
我希望将我的结果显示为3个等级 - 金牌,银牌和铜牌,但如果前两个结果相同,我希望它们都是黄金,留下最低分银。
使用javascript解决此问题的最佳方法是什么?
理想情况下,我对这一特定分数的结果数组如下所示:
var results = array("gold", "gold", "silver");
感谢。
答案 0 :(得分:1)
以下是一些代码:
var scores = [5, 8, 1];
scores.sort(function(a, b) {
return (a > b) ? 1 : ((a < b) ? -1 : 0);
}).reverse();
var medals = {};
var medalsUsed = 0;
var availableMedals = ['Gold', 'Silver', 'Bronze'];
for(var i = 0; i < scores.length; i++) {
var score = scores[i];
var medal;
if(medals[score]) { // already have a medal for this score value? use it
medal = medals[score];
}
else { // use next available medal
if(i >= 3) return; // but not if we've already given out 3 medals
medal = availableMedals.shift();
medals[score] = medal;
}
alert('medal for ' + i + ': ' + medal);
}
答案 1 :(得分:1)
我首先对数组进行排序,然后比较值(1表示2,2表示3)。要对数字数组进行排序,您需要将sort函数作为参数传递给另一个函数。
var medals = ['Gold', 'Silver', 'Bronze'];
score = score.sort(compare);
//Return descending order
function compare(a,b){
return b-a;
}
results[0] = medals.shift();
//I'm assuming you only want top 3 scores
for(var i = 1; i < 3; i++){
if(score[i] == score[i-1]){
results[i] = results[i-1];
}else{
results[i] = medals.shift();
}
}
此代码对分数进行排序,如果它们中的任何一个相等,则将奖章设置为与之前的分数相同。
答案 2 :(得分:0)
首先遍历数组并确定最高和接下来的两个最高分数。
然后循环播放您的玩家分数并将“Gold”分配给与最高分相匹配的任何分数,将“Silver”分配给与第二高分相匹配的任何分数,将“Bronze”分配给与第三高分相匹配的任何分数。
答案 3 :(得分:0)
另一个解决方案是使用Javascript的max()函数,然后比较金/银和铜/银分数。如果金银相等,将银变为金,青铜变为银,如果银和青铜相等,则将青铜变为银。
答案 4 :(得分:0)
另一种方法
var results = ['Gold', 'Silver', 'Bronze'];
var arr = [5, 5, 5];
arr.sort().reverse();
var currentScore = arr[0];
var idx = 0;
for(var i=0; i< arr.length; i++){
if(arr[i]!= currentScore){
idx++;
currentScore = arr[i];
}
alert(arr[i]+ ' has ' + results[idx] + ' medal');
}
更新:fiddle here