javascript - 为什么第二次调用 getCard 函数会返回牌组的第二张?

标签 javascript

我不明白为什么第二次调用 getCard 函数会返回牌组的第二张。由于deck.shift(),它不是总是返回牌组的第一项吗?为什么函数会像for循环一样再次执行?

而且,当我最后注销套牌时,它会返回没有前两项的套牌?

//
//Blackjack
// by Weilin

let suits=['Hearts', 'Clubs', 'Diamonds', 'Spades'];
let values=['Ace', 'King','Queen', 'Jack', 'Ten', 'Nine',
'Eight', 'Seven', 'Six','Five','Four', 'Three','Two'];




function createDeck(){
 let deck=[];

for (let suitIdx=0; suitIdx<suits.length;suitIdx++){
  for (let valueIdx=0;valueIdx<values.length; valueIdx++){
  deck.push(values[valueIdx]+ ' of ' + suits[suitIdx]);
  }

}
  return deck;
}

function getNextCard(){
  return deck.shift();
}
let deck= createDeck();



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

let playerCards=[getNextCard(),getNextCard()];

console.log("Welcome to Blackjack!")

console.log("You are dealt:" )
console.log(" "+playerCards[0])
console.log(" "+playerCards[1])

最佳答案

deck.shift()从数组中删除第一个元素并返回它( more info here ) - 所以如果运行两次,结果将会不同(因为第一次调用更改数组)。所以调用getNextCard()后两次,两个第一个元素被从 desk 中删除。如果您不想从 desk 中删除前两个元素但只阅读它们然后使用

let first  = deck[0];
let second = deck[1];

或者在索引 i 处获取卡片

let card = deck[i];

关于javascript - 为什么第二次调用 getCard 函数会返回牌组的第二张?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57667403/

相关文章:

javascript - Angularjs 隐藏输入字段内的文本

javascript - ckeditor 图标题无法删除,没有新段落

javascript - HTML : Text width is different than summation of its character's width

javascript - 从reactjs的多级嵌套对象数组创建嵌套JSX元素

javascript - 使菜单在点击任意屏幕时消失

javascript - 到 YUI 还是不到 YUI?

javascript - 在现有网站中实现无限滚动

javascript - 响应标签打开不同的幻灯片,如何?

javascript - 在 JSON 内部创建链接并通过 AngularJS 将其注入(inject)到 dom 中

php - 根据广播选择要显示的字段