洗牌/展示牌到二十一点游戏 (Javascript)

Shuffle / display cards to a blackjack game (Javascript)

你知道为什么"card2"随机将一个对象放入数组吗?它应该总是将一个对象放入数组中。

const cards=[
  {
    card: '&#127137',
    value: '1'
  },
  {
    card: '&#127138',
    value: '2'
  },
  {
    card: '&#127139',
    value: '3'
  },
  {
    card: '&#127140',
    value: '4'
  },
  {
    card: '&#127141',
    value: '5'
  },
  {
    card: '&#127142',
    value: '6'
  },
  {
    card: '&#127143',
    value: '7'
  },
  {
    card: '&#127144',
    value: '8'
  },
  {
    card: '&#127145',
    value: '9'
  },
  {
    card: '&#127146',
    value: '10'
  }
];

var deck = [];

shuffleDeck = () =>{
    var tempDeck = [...cards];
    var card1 = [0];
    var card2 = [0];

    while(0 !== tempDeck.length) {
        var randomIndex = Math.floor(Math.random() * tempDeck.length);
        card1 = tempDeck.splice(randomIndex, 1);
        card2 = tempDeck.splice(randomIndex, 1); 
        deck = [...card1, ...card2];
      }
}
shuffleDeck();

 for(var i = 0; i <= deck.length; i++){
     console.log(deck[i]);
} 

我想这个问题应该更清楚了...但是 运行 你应该并且认为代码应该洗牌我猜你的错误在那一行 deck = [...card1, ...card2]; 因为你在循环,您当时只是将 2 张牌放入您的新牌组中,因此在下一次交互中它们将忽略最后的值并覆盖它,您应该使用 deck.push 在牌组中添加新牌。

const cards=[
      {
        card: '&#127137',
        value: '1'
      },
      {
        card: '&#127138',
        value: '2'
      },
      {
        card: '&#127139',
        value: '3'
      },
      {
        card: '&#127140',
        value: '4'
      },
      {
        card: '&#127141',
        value: '5'
      },
      {
        card: '&#127142',
        value: '6'
      },
      {
        card: '&#127143',
        value: '7'
      },
      {
        card: '&#127144',
        value: '8'
      },
      {
        card: '&#127145',
        value: '9'
      },
      {
        card: '&#127146',
        value: '10'
      }
    ];

    var deck = [];

    shuffleDeck = () => {
        var tempDeck = [...cards];
        var card1 = [0];
        var card2 = [0];

        while(0 !== tempDeck.length) {
            var randomIndex = Math.floor(Math.random() * tempDeck.length);
            card1 = tempDeck.splice(randomIndex, 1);
            card2 = tempDeck.splice(randomIndex, 1); 
            deck.push(...card1, ...card2);
          }
    }
    shuffleDeck();
    
    for(var i = 0; i < deck.length; i++){
         console.log(deck[i]);
    } 

您的代码中有两件事需要修复:

  1. while 中,您只设置一次 randomIndex 并将其用于 card1card2,但是当您设置 card1 它使用 splice 并删除该索引,因此 card2 未定义。
    FIX:设置 randomIndex 后再次设置 [=13] =]

  2. for循环中,需要i < deck.length而不是i <= deck.length,这样可以避免未定义的值,因为当i等于deck.length 应该是 2,deck 没有索引 2,它只有索引 0 和 1。

const cards = [{card: '&#127137', value: '1'}, {card: '&#127138', value: '2'}, {card: '&#127139', value: '3'}, {card: '&#127140', value: '4'}, {card: '&#127141', value: '5'}, {card: '&#127142', value: '6'}, {card: '&#127143', value: '7'}, {card: '&#127144', value: '8'}, {card: '&#127145', value: '9'}, {card: '&#127146', value: '10'}];

var deck = [];
shuffleDeck = () =>{
  var tempDeck = [...cards];
  var card1 = [0];
  var card2 = [0];

  while(0 !== tempDeck.length) {
    var randomIndex = Math.floor(Math.random() * tempDeck.length);
    card1 = tempDeck.splice(randomIndex, 1);

    randomIndex = Math.floor(Math.random() * tempDeck.length);
    card2 = tempDeck.splice(randomIndex, 1); 
    deck = [...card1, ...card2];
  }
}

shuffleDeck();

for(var i = 0; i < deck.length; i++){
     console.log(deck[i]);
}