首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简约失态

简约失态
EN

Stack Overflow用户
提问于 2018-04-09 19:30:15
回答 3查看 28关注 0票数 0

当我写这篇文章时,我假设第二个控制台日志将是一个4的数组。我的印象是,我的代码将带谁,然后将其连接到数组2的第一个console.log,然后下一个迭代将是一个4的数组,因为它是连接的。

代码语言:javascript
复制
let player1Hand = [];



function drawDeck(whom, whichDeck, howMany) {
    whom = whom.concat(whichDeck.splice(0, howMany));
    console.log(whom);
}

drawDeck(player1Hand, genericDeck, 2);
drawDeck(player1Hand, genericDeck, 2);

相反,控制台日志是第一个数组,然后第二个日志是一个分隔数组。我想当我写这篇文章的时候,我自己躲起来了。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-04-09 19:41:27

您遇到的问题是使用concat返回一个新数组,而不是将这些项添加到您已经拥有的当前数组中。将其设置为旧值不会更新引用。所以你应该和推荐人合作。

使用ES6,您可以使用spread运算符

代码语言:javascript
复制
const newItems = whichDeck.splice(0, howMany)
whom.push(...newItems);

或者没有ES6,你可以用

代码语言:javascript
复制
var newItems = whichDeck.splice(0, howMany)
whom.push.apply(whom, newItems)

代码语言:javascript
复制
let playerDeck1 = []
let playerDeck2 = []
let remainingCards = [1,2,3,4,5,6,7,8,9,
10,11,12,13,14,15,16,17,18,19,
20,21,22,23,24,25,26,27,28,29]

const deal = (playerDeck, pile, drawCount) => {
  const newItems = pile.splice(0, drawCount)  // remove top N cards from the deck
  playerDeck.push(...newItems);  // put them on the end of the players current hand
}

console.group("turn1")
deal(playerDeck1, remainingCards, 5)  // 1,2,3,4,5
deal(playerDeck2, remainingCards, 5)  // 6,7,8,9,10
console.log("player1", JSON.stringify(playerDeck1))
console.log("player2", JSON.stringify(playerDeck2))
console.groupEnd("turn1")


console.group("turn2")
deal(playerDeck1, remainingCards, 2) // 1,2,3,4,5 + 11,12
deal(playerDeck2, remainingCards, 2) // 6,7,8,9,10 + 13,14
console.log("player1", JSON.stringify(playerDeck1))
console.log("player2", JSON.stringify(playerDeck2))
console.groupEnd("turn2")

console.group("turn3")
deal(playerDeck1, remainingCards, 2) // 1,2,3,4,5,11,12 + 15,16
deal(playerDeck2, remainingCards, 2) // 6,7,8,9,10,13,14 + 17,18
console.log("player1", JSON.stringify(playerDeck1))
console.log("player2", JSON.stringify(playerDeck2))
console.groupEnd("turn3")

票数 0
EN

Stack Overflow用户

发布于 2018-04-09 19:35:22

代码语言:javascript
复制
let player1Hand = [];



function drawDeck(whom, whichDeck, howMany) {
    whom = whom.concat(whichDeck.splice(0, howMany));
    console.log(whom);
    player1Hand = whom;
}

drawDeck(player1Hand, genericDeck, 2);
drawDeck(player1Hand, genericDeck, 2);

我只是躲着自己..。在这个函数是临时的,我需要重新评估player1Hand的值,让它回到函数的范围之外。因此,第二次运行时,player1Hand值已更改为第一项.

抱歉的。也许这会对其他人有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2018-04-09 19:40:33

代码语言:javascript
复制
  whom = whom.concat(whichDeck.splice(0, howMany));

它用一个新数组重写存储到局部变量whom中的引用。它不以任何方式更改传递的引用或外部变量。因此,playerHand1不会改变。相反,您可以扩展到Array.push中来实际地对传递的数组进行变异:

代码语言:javascript
复制
 whom.push(...whichDeck.splice(0, howMany));

或者只返回新的数组:

代码语言:javascript
复制
return whom.concat(whichDeck.splice(0, howMany));

然后将其存储在playerHand1

代码语言:javascript
复制
  playerHand1 = drawDeck(playerHand1, genericDeck, 2);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49740319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档