Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

152
Visualizações
La matriz se aleatoriza antes de llamar a la función de aleatorización

Estoy tratando de implementar una baraja de cartas barajadas en Javascript, pero me encuentro con un comportamiento que me cuesta entender.

Aquí está mi código. Para ser conciso, este mazo contiene solo cartas con caras 1-5 y solo dos palos:

 function shuffleArray(array) { for (var i = array.length - 1; i > 0; i--) { var j = Math.floor(Math.random() * (i + 1)); var temp = array[i]; array[i] = array[j]; array[j] = temp; } } function getDeck() { let values = Array(5).fill().map((element, index) => index + 1); let suits = ['H', 'D']; let deck = new Array(); values.forEach(function(value) { suits.forEach(function(suit) { let card = { 'value': value, 'suit': suit } deck.push(card); }) }) return deck } var deck = getDeck(); console.log(deck); shuffleArray(deck); console.log(deck);

Tomé el código aleatorio en el lugar de esta respuesta

Esperaría que la primera declaración de registro muestre un mazo sin barajar y que la segunda declaración de registro muestre un mazo barajado. ¡En cambio, ambos muestran mazos barajados de manera idéntica! ¡Es como si la aleatorización retrocediera en el tiempo!

ingrese la descripción de la imagen aquí

Para empeorar las cosas, cuando intenté codificar un ejemplo mínimo por primera vez, no me molesté con los valores y los palos y solo traté de barajar una pequeña matriz, pero en ese caso, funcionó exactamente como se esperaba, solo profundizando mi confusión. ..

 function shuffleArray(array) { for (var i = array.length - 1; i > 0; i--) { var j = Math.floor(Math.random() * (i + 1)); var temp = array[i]; array[i] = array[j]; array[j] = temp; } } function getDeck() { let deck = [1, 2, 3, 4, 5]; return deck; } var deck = getDeck(); console.log(deck); shuffleArray(deck); console.log(deck);

En ese caso, la salida es

ingrese la descripción de la imagen aquí

¿Que esta pasando? ¿Por qué el caso simple funciona pero el caso más complejo parece no hacerlo? ¿Qué pasa con el tiempo o el alcance que estoy malinterpretando?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Está modificando directamente en la matriz principal (la plataforma original) y console.log no es síncrono, por eso ambos son iguales. Le sugiero que clone otra matriz y modifique esa nueva matriz en su lugar

 const newArray = [...array] //clone the original array to the new array 

 function shuffleArray(array) { const newArray = [...array] for (var i = newArray.length - 1; i > 0; i--) { var j = Math.floor(Math.random() * (i + 1)); var temp = newArray[i]; newArray[i] = newArray[j]; newArray[j] = temp; } return newArray } function getDeck() { let values = Array(5).fill().map((element, index) => index + 1); let suits = ['H', 'D']; let deck = new Array(); values.forEach(function(value) { suits.forEach(function(suit) { let card = { 'value': value, 'suit': suit } deck.push(card); }) }) return deck } var deck = getDeck(); console.log(deck); const newDeck = shuffleArray(deck); console.log(newDeck);
 .as-console-wrapper { max-height: 100% !important; top: 0; }

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda