json - asignCards() 函数应该将卡片数组中的随机卡片分配给每个玩家
问题描述
这个 asignCards() 函数应该将卡片数组中的随机卡片分配给每个玩家。这些卡片不应该重复,但我得到重复的卡片。
// 对于玩家数组中的每个玩家,每个玩家都会收到两张牌。
const asignCards = () => {
players.forEach((player) => {
let useCards = [];
let inUse = cards;
for (let i = 0; i < 1; i++) {
let random = Math.floor(Math.random() * 52);
let random2 = Math.floor(Math.random() * 52);
if (
useCards.indexOf(JSON.stringify(inUse[random])) === -1 ||
useCards.indexOf(JSON.stringify(inUse[random2])) === -1 ||
useCards.indexOf(JSON.stringify(inUse[random])) !==
useCards.indexOf(JSON.stringify(inUse[random2]))
) {
player.card1 = inUse[random];
player.card2 = inUse[random2];
useCards.push(JSON.stringify(player.card1));
useCards.push(JSON.stringify(player.card2));
}else {
i--;
}
}
console.log(player);
});
};
asignCards();
解决方案
您应该useCards
在循环之外声明您的数组,否则每次迭代都会为空。这么说来,你不能为一个玩家重复,但同一张牌可以分配给更多的玩家。
const asignCards = () => {
let useCards = [];
players.forEach((player) => {
let inUse = cards;
for (let i = 0; i < 1; i++) {
let random = Math.floor(Math.random() * 52);
let random2 = Math.floor(Math.random() * 52);
if (
useCards.indexOf(JSON.stringify(inUse[random])) === -1 ||
useCards.indexOf(JSON.stringify(inUse[random2])) === -1 ||
useCards.indexOf(JSON.stringify(inUse[random])) !==
useCards.indexOf(JSON.stringify(inUse[random2]))
) {
player.card1 = inUse[random];
player.card2 = inUse[random2];
useCards.push(JSON.stringify(player.card1));
useCards.push(JSON.stringify(player.card2));
}else {
i--;
}
}
console.log(player);
});
};
asignCards();
奖励:您可能希望使用 double 将您的函数重命名为 assignCards (来自assign)s
。
更新:这是一种不同的方法。每次你想玩时,你先洗牌,然后从牌堆顶部用 选择你的牌数量Array.pop()
,这样你就 100% 确定不会有重复的牌。
let players = ["A", "B", "C", "D"];
let cards = [...Array(52).keys()];
const cardsPerPlayer = 2;
const asignCards = () => {
// Shuffle deck
var n = cards.length;
while (n--) {
var i = Math.floor(n * Math.random());
var tmp = cards[i];
cards[i] = cards[n];
cards[n] = tmp;
}
players.forEach((player, index) => {
let myCards = [];
for (c = 0; c < cardsPerPlayer; c++) {
myCards.push(cards.pop());
}
console.log(`${player} has the following cards: ${myCards}`);
});
};
asignCards();
推荐阅读
- javascript - 单击表时访问项目信息
- microsoft-teams - Teams:卡片编辑器(App Studio)是否支持发送自适应卡片 1.2
- android - 将动态功能插入到现有应用程序包中
- javascript - CSS/JS/HTML - 突出显示用户选择
- javascript - 反应原生样式不组合
- pycharm - 将现有的实时模板文件添加到 pycharm 2020.1?
- c# - System.Net.Security.SslStream 与 HSM
- azure - 从 Azure 应用服务发送电子邮件,发件人作为我的域电子邮件
- php - 我在 php 中有一个名为 id 的变量。我想用它作为表名。这段代码不是在 php myadmin 中创建表
- apache-flink - java.net.NoRouteToHostException 到 [null] 的远程连接失败:任务管理器中没有到主机的路由