Javascript shift()总是返回0

Javascript shift() always returning 0

本文关键字:返回 shift Javascript      更新时间:2023-12-19

我有一个卡片组对象,它本质上只是用0-51(52张卡片)填充一个卡片数组,然后洗牌。我有一个cards.deal()方法,它返回一张卡片。当我使用cards.pop()时,我总是得到一个不同的数字,这是预期的;然而,当我使用cards.shift()时,它总是返回0。我满足于使用pop,但只是想了解一下为什么我在使用shift时总是得到0。我已经将洗牌次数改为10000这样的大数字,只是为了确保它的洗牌次数足以真正交换数组中的第一个元素。即使在0到51之间生成了10000个随机数之后,Math.ceil方法也可能不返回0吗?这是怎么回事?

function Deck(){
    var cards = [];
    this.shuffle = function(){
        var tempCardHolder = 0;
        var randomNumber = 0;
        var randomNumber2 = 0;
        // fill the card array with 52 cards
        for (x = 0; x <= 51; x++){
            cards[x] = x;
        }

        // now let's shuffle them up by swapping two cards randomly 50 times
        for (y = 0; y < 100; y++){
            // make sure we get two random numbers that are different
            do {
                randomNumber = Math.ceil(Math.random() * 51);
                randomNumber2 = Math.ceil(Math.random() * 51);
            } while (randomNumber == randomNumber2);
            tempCardHolder = cards[randomNumber];
            cards[randomNumber] = cards[randomNumber2];
            cards[randomNumber2] = tempCardHolder;
        }
    }
    this.deal = function(){
        return cards.shift();
    }
    this.getNumCardsLeft = function(){
        return cards.length;
    }   
}

使用Math.floor对数字进行四舍五入。对于包含的范围,请确保您乘以一个比您想要的最大值大的值

以下是包含端点的随机整数生成器的示例

function random_int(max, min) {
    min = min || 0;
    return min + Math.floor(Math.random() * (max - min + 1));
}