首页 > 解决方案 > 尝试将一对数组值随机推送到另一个数组中而不重复javascript

问题描述

我正在尝试制作记忆卡游戏,但这部分很难弄清楚。我有一个带有一副纸牌的数组,我试图从纸牌中随机选择特定数量的卡片并将它们推入 gameBoard 数组,但我最初会不断重复这些卡片。基本上我试图洗牌。我尝试使用条件语句,但我不知道这是否正确,但它仍然不起作用。

javascript

const deckOfCards = [
  'card1',
  'card2',
  'card3',
  'card4',
  'card8',
  'card9',
  'card10',
  'card11',
  'card12',
  'card13',
  'card14',
]


let shuffle = deckOfCards[Math.floor(Math.random() * deckOfCards.length)];
let pair = [shuffle, shuffle]
let len = mode

for (let i = pair; i < deckOfCards.length; i++) {
  if (gameBoard.indexOf(deckOfCards[i]) === -1) {
    gameBoard.push(deckOfCards[pair])
  }
}
console.log(gameBoard)
});
let gameBoard = []

标签: javascriptarraysif-statementrandompush

解决方案


只是一个想法:您可以将选定的元素移动到数组的后面,然后从先前未更改的数组的切片中随机选择东西......就像array.slice(0, {a_number_here}.

我猜是这样的(我无法让您的代码正常工作,因此尚未测试):

let shuffle = deckOfCards[Math.floor(Math.random() * deckOfCards.length - 5)]
name = deckOfCards.splice(shuffle, 1)
deckOfCards.push(name)

顺便说一句,如果您可以使用库,只需使用 underscore.js,它就会变得非常简单。像这样:

b = _.shuffle(deckOfCards).slice(0,5);
console.log(b)

您也可以查看这些存储库(虽然我还没有机会查看它们,但它们有很多星星,所以):


推荐阅读