Javascript-代码比我需要的更多

时间:2018-10-11 05:15:32

标签: javascript

尝试添加新方法

我正在尝试将两张牌分别添加到玩家/交易者手中,但是当我登录时:

[ { suit: '♠', value: 'A', points: 11 } ]
[ { suit: '♠', value: 'A', points: 11 },
  { suit: '♦', value: 10, points: 10 } ]

为什么我要返回3个对象而不是2个?

const dealRandomCard = () => {
 return deckOfCards.splice(Math.floor(Math.random() * 
deckOfCards.length), 1)[0];
}

// console.log(dealRandomCard());


for (let i = 0; i <= 2; i++) {
 playerHand.push(dealRandomCard());
 dealerHand.push(dealRandomCard());
  console.log(playerHand);
// console.log(dealerHand);
}

2 个答案:

答案 0 :(得分:3)

for (let i = 0; i < 2; i++) {
  playerHand.push(dealRandomCard());
  dealerHand.push(dealRandomCard());
  console.log(playerHand);
}

您的循环应为for (let i = 0; i < 2; i++),而不是for (let i = 0; i <= 2; i++)

由于从023 ... [0,1,2] = 3的长度,这花费了额外的迭代时间。

还:return deckOfCards.splice(Math.floor(Math.random() * deckOfCards.length), 1)[0];

如果这使您超过1,则您最终将得到3,因为deck包含1 + 2的数组,@Ricky Mo很好地指出了这一点

答案 1 :(得分:2)

您在每次迭代中都调用console.log()。每次添加一张卡,就打印一次。给定的输出实际上是两个数组,由两次迭代打印而成。第一张拥有1张卡,第二张拥有2张卡。仔细查看[]

第一次迭代:

[ { suit: '♠', value: 'A', points: 11 } ]

第二次迭代:

[ { suit: '♠', value: 'A', points: 11 },
{ suit: '♦', value: 10, points: 10 } ]