JavaScript - Duda JavaScript: desordenar array con bucle

 
Vista:
Imágen de perfil de Andrea

Duda JavaScript: desordenar array con bucle

Publicado por Andrea (1 intervención) el 12/05/2018 18:25:02
Estoy haciendo un ejercicio para un trabajo y tengo un problema a la hora de desordenar un array. Es decir, tengo un array llamado "numeros" y una función que lo desordena. Después creo un array vacío llamado "numerosDesordenados" el cual lo llenaré con tres posiciones, las cuales serán tres veces el array "numeros" desordenado de diferente manera. ¿Por qué cuando creo las posiciones del array "numerosDesordenados" con la función de desordenar el array "numeros" siempre me crea el mismo desorden? Os muestro código y el resultado:

1
2
3
4
5
6
7
8
9
10
11
12
function desordenar(array){
  array = array.sort(function() {return Math.random() - 0.5});
  return array;
} // esta función me desordena un array
 
var numeros= ["1", "2", "3", "4", "5"]; //este es mi array
 
numerosDesordenados= []; // array vacio
 
for (i=0;i<3;i++){ //creo bucle para llenar array vacío
  numerosDesordenados[i] = desordenar(numeros);
}


Si hago un console.log(numeros) me muestra en consola ["1, "2", "3", "4", "5"]. Bien...Si hago un console.log(numerosDesordenados) me muestra un array con tres posiciones siempre con la misma mezcla, por ejemplo:

[0] = ["2","3","1","5","4"]

[1] = ["2","3","1","5","4"]

[3] = ["2","3","1","5","4"]

Yo quiero que las tres posiciones sean diferentes. Como lo puedo hacer?? Muchas gracias!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de abzerox
Val: 477
Bronce
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

Duda JavaScript: desordenar array con bucle

Publicado por abzerox (130 intervenciones) el 13/05/2018 09:58:40
Hola, el problema es que estas pasando el array numeros como tal, es decir una referencia, no una copia de los valores de este, y por ende siempre que ordenas lo modificas. Hice una pequeña modificación en tu código, fijate que utilizo el método slice el cual genera una copia de todos los valores del array (esto es porque no le pase parámetros de inicio y fin):

1
2
3
4
5
6
7
8
9
10
11
12
function desordenar(array){
    return array.sort(() => Math.random() - 0.5);
}
 
let numeros= ["1", "2", "3", "4", "5"]; //este es mi array
let numerosDesordenados= []; // array vacio
 
for (let i=0;i<3;i++){ //creo bucle para llenar array vacío
    numerosDesordenados[i] = desordenar(numeros.slice());
}
console.log(numeros);
console.log(numerosDesordenados);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar