此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();
Bonus:您可能想用双assign将函数重命名为assignCard(来自s
)。
更新:这是另一种方法。每次您要玩时,请先将牌组洗牌,然后用Array.pop()
从牌组顶部选择您的纸牌数量,这样您就可以100%确保不会重复。
Array.pop()