我从这个社区学到了很多东西。这是我在这里的第一篇文章,最近我开始学习编码。 我正在通过创建一个在Alec和Bob之间玩的简单纸牌游戏来练习JS。 每个玩家从卡组轮流抽一张牌。抽出较高牌的玩家将赢得比赛。 我正在尝试找出Alec赢了多少场比赛?
这是我所做的:
function solution(A, B) {
var card1, card2;
var alecWin = 0;
var cards = ["2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"];
var alecCards = A.split("");
var bobCards = B.split("");
for(var i=0; i< alecCards.length; i++){
for(var j=0; j< bobCards.length; j++){
alecIndex = alecCards.indexOf(i);
bobIndex = bobCards.indexOf(j);
if(alecIndex > bobIndex){
alecWin++;
}
}
return alecWin;
}
}
solution("23JK45", "352Q8")
我想返回亚历克赢得比赛的次数。谁能帮助我,并告诉我我做错了什么?
答案 0 :(得分:3)
使用 one 循环而不是嵌套循环。然后,您要检查cards
数组中每个玩家卡的索引,因此使用:
alecIndex = cards.indexOf(alecCards[i]);
bobIndex = cards.indexOf(bobCards[i]); // use i, not j - same index
然后您可以比较指标:
function solution(A, B) {
var card1, card2;
var alecWin = 0;
var cards = ["2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"];
var alecCards = A.split("");
var bobCards = B.split("");
for (var i = 0; i < alecCards.length; i++) {
alecIndex = cards.indexOf(alecCards[i]);
bobIndex = cards.indexOf(bobCards[i]);
if (alecIndex > bobIndex) alecWin++;
}
return alecWin;
}
console.log(solution("23JK4", "352Q8"));
但是,使用卡标签索引的对象或Map
会更容易,更快捷(复杂度更低),其值就是该卡的索引。请注意,无需将字符串转换为数组,str[index]
在字符串上的效果很好:
function solution(A, B) {
const cards = ["2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"];
const cardObj = cards.reduce((a, label, i) => {
a[label] = i;
return a;
}, {});
let winCount = 0;
for (let i = 0; i < A.length; i++) {
if (cardObj[A[i]] > cardObj[B[i]]) winCount++;
}
return winCount;
}
console.log(solution("23JK4", "352Q8"));
还请注意,您应该修正输入内容:两个输入字符串的长度都应为相同,以得到有意义的结果。