gpt4 book ai didi

javascript - 从一副牌中发牌和从阵列中取出牌

转载 作者:行者123 更新时间:2023-11-30 07:55:49 25 4
gpt4 key购买 nike

我有一组这样的卡片名称:

var deckNames = [ "unused",
"sA", "s2", "s3", "s4", "s5", "s6", "s7", "s8", "s9", "s10", "sJ", "sQ", "sK",
"hA", "h2", "h3", "h4", "h5", "h6", "h7", "h8", "h9", "h10", "hJ", "hQ", "hK",
"cA", "c2", "c3", "c4", "c5", "c6", "c7", "c8", "c9", "c10", "cJ", "cQ", "cK",
"dA", "d2", "d3", "d4", "d5", "d6", "d7", "d8", "d9", "d10", "dJ", "dQ", "dK",
];

我想编写一个函数,从数组中随机选择一张卡片,并将其从上面的“deckNames”数组中删除。我写了以下内容,但似乎没有用。

var deal = function(){
var card = Math.floor(Math.random() * 52) + 1;
return deckNames[card];
deckNames.splice(card,1);
};

当我在控制台中运行 deal 函数时,它从数组中随机挑选并返回一张牌,但是 deckNames 数组本身并没有移除发牌从阵列。我怎样才能做到这一点?谢谢。

最佳答案

您的return 语句会在牌组被修改之前结束您的函数。切换语句,使 return 成为函数中的最后一个东西。此外,正如@DavidE 指出的那样,您无法在卡片被移除后从阵列中获取卡片,因此您必须在移除之前取回它:

var deal = function(){
var index = Math.floor(Math.random() * 52) + 1;
var card = deckNames[index];
deckNames.splice(index, 1);
return card;
};

或者简单地说:

var deal = function(){
var card = Math.floor(Math.random() * 52) + 1;
return deckNames.splice(card, 1)[0];
};

(因为 splice 返回被移除的元素,包装在一个新数组中)。


其他一些需要考虑的事情:

  • 数组索引从 0 开始,因此您可能不希望随机数生成器中有 +1。你实际上想要从 0 到 51* 的数字:

    var card = Math.floor(Math.random() * 52);

  • 每发一张牌,牌组的大小就会减少。不是每次生成最多 51 个随机数,而是在调用函数时根据牌组的大小来生成该数字。否则你会得到索引超出范围的错误。见下文。


最终,这会给你这样的东西:

var deal = function(){
var card = Math.floor(Math.random() * deckNames.length);
return deckNames.splice(card, 1)[0];
};

关于javascript - 从一副牌中发牌和从阵列中取出牌,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39967891/

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