Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

146
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda