尝试创建随机播放功能

时间:2019-07-14 04:30:43

标签: javascript arrays shuffle

该功能可以正常工作,但是当随机播放的次数过多时,第53个未定义元素会添加到数组中。

function shuffle(deck , shuffles) {
    for(let i = 0; i < shuffles; i++) {
     let first = Math.floor(Math.random() * 53);
     let secound = Math.floor(Math.random() * 53);
     let fShuffle = deck[first];
     let sShuffle = deck[secound];
     deck[first] = sShuffle;
     deck[secound] = fShuffle;
    }
    return deck;
  }

它会重排所有内容,但会出现一个未定义的元素,我不确定如何清除它。

2 个答案:

答案 0 :(得分:1)

我的代码创建了一个随机数,然后乘以套牌的长度以获取特定的索引,然后将该索引的值添加到新数组中。

    for (shuffled_deck.length = 0; shuffled_deck.length < 52 ; shuffled_deck) {
        // Creates a random number and multiplies it by length of deck.
        var chosencard = Math.ceil(Math.random() * numcards)
        if (chosencard == 52) {
           chosencard = 0
        }

        var addcard = totaldeck[chosencard]
        // Uses the random number to be an index in the totaldeck array 
        if (shuffled_deck.includes(addcard)) {
        }
        else {
           shuffled_deck.push(addcard) // Adds the value into the new shuffled deck array
        }
    }
    console.log(shuffled_deck)

希望如此。

答案 1 :(得分:0)

由于卡片组将包含52个元素,因此,如果您的0 to 51结果为Math.floor(Math.random() * 53),那么您的索引将来自52,那么您将访问未定义的deck[52]

您需要将其更改为

Math.floor( Math.random() * 52 )