Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

151
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!