Mezclar un array en JavaScript

Es frecuente trabajar con arrays en JavaScript, ya que es útil para colecciones sencillas, que no requieran operaciones complejas con ellas. Una de estas operaciones que se puede necesitar en algunos casos, es la de mezclar un array o, en otras palabras, barajar, desordenar un array. En inglés se le suele llamar shuffle a este término.
Hay múltiples formas y algoritmos de desordenar un array. En este caso nos vamos a centrar en el algoritmo Fisher-Yates. En esta implementación, se coge un elemento aleatorio de la lista y se intercambia con el último de la lista. En la siguiente iteración, se repetirá la operación pero sin tener en cuenta el último elemento de la lista, el cual ya es aleatorio. Y así repetidamente, tomando cada vez un elemento menos de la lista, hasta que ya no queden elementos por mover al final.

Usos de desordenar un array

Algunos usos típicos para desordenar un array, podría ser para juegos. Por ejemplo, para barajar una baraja de cartas. También puede interesar mezclar una lista de un reproductor de música, el típico botón shuffle de muchos reproductores que sirve para escuchar las canciones en un orden aleatorio.

Código para mezclar un array en JavaScript

function shuffle(array) {
  var currentIndex = array.length, temporaryValue, randomIndex;

  // Mientras queden elementos a mezclar...
  while (0 !== currentIndex) {

    // Seleccionar un elemento sin mezclar...
    randomIndex = Math.floor(Math.random() * currentIndex);
    currentIndex -= 1;

    // E intercambiarlo con el elemento actual
    temporaryValue = array[currentIndex];
    array[currentIndex] = array[randomIndex];
    array[randomIndex] = temporaryValue;
  }

  return array;
}

Un ejemplo de uso podría ser el siguiente. Simplemente hay que pasar como parámetro el array a desordenar a la función, la cual devolverá el array ya mezclado.

var arr = [23, 15, 67, 98, 7];
arr = shuffle(arr);
console.log(arr);

Deja un comentario

Esta web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está aceptando éstas y nuestra política de las mismas.

ACEPTAR
Aviso de cookies