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

244
Vistas
Mezclar matrices anidadas en Javascript

Estoy tratando de ordenar varias matrices dentro de una matriz (que también debe barajarse). Un ejemplo simplificado es:

 let toShuffle = [ [1, 2, 3, 4, 5], [9, 8, 7, 6, 5], [10, 67, 19 ,27] ... ]; const shuffled = shuffle(toShuffle); // outout would look something like: // [ // [8, 6, 5, 7, 9], // [4, 3, 1, 5, 2], // [19, 26, 10, 67], // ... // ]

Esto debe ser flexible, por lo que cualquier cantidad de matrices con cualquier cantidad de valores debería ser válida.

Esto es lo que he probado:

 function shuffle(a) { for (let e in a) { if (Array.isArray(a[e])) { a[e] = shuffle(a[e]); } else { a.splice(e, 1); a.splice(Math.floor(Math.random() * a.length), 0, a[e]); } } return a; } console.log("Shuffled: " + shuffle([ [1, 2, 3, 4, 5], [5, 4, 3, 2, 1] ]))

Pero no está funcionando según lo previsto. ¿Es su una manera más fácil de hacer esto? ¿O mi código es correcto y solo tiene errores?

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Casi lo tienes. El problema es que está eliminando un elemento de una matriz, en lugar de capturar el elemento eliminado y colocarlo en una posición aleatoria:

 let toShuffle = [ [1, 2, 3, 4, 5], [9, 8, 7, 6, 5], [10, 67, 19 ,27] ]; function shuffle(a) { a = [...a]; //clone array for (let e in a) { if (Array.isArray(a[e])) { a[e] = shuffle(a[e]); } else { a.splice(~~(Math.random() * a.length), 0, a.splice(e, 1)[0]); } } return a; } console.log(JSON.stringify(shuffle(toShuffle))) console.log(JSON.stringify(toShuffle))

[EDITAR] El código original no barajó la matriz principal, si necesita barajar todo recursivamente, puede usar esto:

 let toShuffle = [ [1, 2, 3, 4, 5], [9, 8, 7, 6, 5], [10, 67, 19 ,27] ]; function shuffle(a) { a = a.map(i => Array.isArray(i) ? shuffle(i) : i); //clone array a.sort(i => ~~(Math.random() * 2) - 1); //shuffle return a; } console.log("shuffled", JSON.stringify(shuffle(toShuffle))) console.log("original", JSON.stringify(toShuffle))

about 4 years ago · Juan Pablo Isaza Denunciar

0

Puede usar Array.from() para crear una nueva array de copia superficial y luego mezclar Array.prototype.sort() combinado con Math.random()

Código:

 const toShuffle = [ [1, 2, 3, 4, 5], [9, 8, 7, 6, 5], [10, 67, 19 ,27] ] const shuffle = a => Array.from(a).sort(() => .5 - Math.random()) const result = toShuffle.map(shuffle) console.log('Shuffled:', JSON.stringify(result)) console.log('To shuffle:', JSON.stringify(toShuffle))

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