переменная копирует неправильный контент js - PullRequest
0 голосов
/ 23 октября 2018

Это весь код js, когда я консоль записываю в переменную raw, он возвращает перемешанную колоду, я не понимаю этого, я новичок в js, и я попробовал это.но я не знаю, как это работает, а также, в чем разница между var и let, если вы, ребята, не возражаете, я спрашиваю?спасибо.

function drawDeck(){
  var deck = []
  var value = [2,3,4,5,6,7,8,9,10,10,10,10,11]
  for(var i=0;i<4;i++){
    for (var j=0;j<13;j++){
      deck.push(value[j])
    }
  }
  return deck
}

function shuffleDeck(deck){
  var currentPos = deck.length, tempPos , randPos
  while (currentPos != 0){
    randPos = Math.floor(Math.random() * currentPos)
    currentPos -= 1
    tempPos = deck[currentPos]
    deck[currentPos] = deck[randPos]
    deck[randPos] = tempPos
  }
  return deck
}

function drawCard(deck){
  var card = deck.shift()
  return card
}
var raw = drawDeck()
var deck = shuffleDeck(raw)
var card = drawCard(deck)
console.log(raw)

1 Ответ

0 голосов
/ 23 октября 2018

Функция тасования работает на самом элементе ввода.Так как вы вводите raw в функцию shuffle, оно само будет изменено, и, таким образом, вы получите перемешанную колоду при ее регистрации.Неважно, будет ли он возвращен или нет.

Если вы хотите сохранить исходный массив, клонируйте массив в новую переменную внутри функции shuffle и выполните перемешивание клона и верните его.

var raw = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16];
var shuffled;

function shuffleDeck(deck) {
  var currentPos = deck.length,
    tempPos, randPos
    var tempDeck = Array.from(deck);
  while (currentPos != 0) {
    randPos = Math.floor(Math.random() * currentPos)
    currentPos -= 1
    tempPos = tempDeck[currentPos]
    tempDeck[currentPos] = tempDeck[randPos]
    tempDeck[randPos] = tempPos
  }
  return tempDeck
}
shuffled = shuffleDeck(raw);
alert('original: ' + raw);
alert('shuffled: ' + shuffled);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...