Autor
|
Tema: [JS] Random sin repetir (Leído 17,750 veces)
|
Linton
Desconectado
Mensajes: 239
|
Estaba buscando si había una función interna de javascript para seleccionar elementos de un array sin repetirlos, y me parece que no. Así que haré un programa con ese fin. ¿Alguna sugerencia? No pido código sino sólo una orientación general Muchas gracias, un saludo.
|
|
|
En línea
|
|
|
|
1mpuls0
Desconectado
Mensajes: 1.186
|
A ver si entendí.
Por ejemplo tienes [1][2][3][2][4][5]
y quieres que te seleccione?. [1][2][3][4][5]
Saludos.
|
|
|
En línea
|
abc
|
|
|
Linton
Desconectado
Mensajes: 239
|
Eso es No necesariamente con el mismo número de elementos, es decir, que con ['1', '2', '3', '4', '5', '6', '7', '8','9','10','11','12'] seleccione por ejemplo ['3','9', '2', '5', '7']. La cantidad que sea, siempre sin repetir ninguno. Un saludo.
|
|
|
En línea
|
|
|
|
1mpuls0
Desconectado
Mensajes: 1.186
|
Quieres seleccionar x numeros aleatorios pero sin repetir?.
si es así, puedes tener dos array el primero es donde tienes todos tus numeros el segundo es donde vas a ir guardando.
recorre el primero arreglo con un ciclo. si el elemento del indice se encuentra en el array2 entonces no lo guarda en caso contrario lo guarda hasta que termine de recorrer array1
Saludos.
|
|
|
En línea
|
abc
|
|
|
Linton
Desconectado
Mensajes: 239
|
Me pongo a ello, a ver si saco un script limpio y decente ¡Muchas gracias por tu ayuda!
|
|
|
En línea
|
|
|
|
Linton
Desconectado
Mensajes: 239
|
Pues no lo consigo... Aquí va mi intento: function selecLista(){ var zoo = ['Gato', 'Perro', 'Caballo', 'Ganso', 'Pez', 'Foca', 'Papagayo', 'Coyote', 'Milano', 'Nutria', 'Cotorra', 'Tigre']; var lote = []; for(i=0; i<4; i++){ lote[i] = zoo[parseInt(Math.random()* 12)]; if(lote.indexOf(zoo[parseInt(Math.random()*14)])!=-1) break; } document.write(lote); } selecLista();
A veces en vez de cuatro se obtienen tres resultados, a veces dos, a veces uno... pero no consigo eliminar las repeticiones ¿Cómo podría arreglarse? Muchas gracias, un saludo.
|
|
|
En línea
|
|
|
|
#!drvy
|
No entiendo porque generas dos random y esperas que coincidan ·_· function selecLista(){ var zoo = ['Gato', 'Perro', 'Caballo', 'Ganso', 'Pez', 'Foca', 'Papagayo', 'Coyote', 'Milano', 'Nutria', 'Cotorra', 'Tigre']; var lote = []; // Cantidad aleatoria de elementos basada en la cantidad de elemenos de la variable zoo. var cantidad = Math.floor((Math.random()*zoo.length)); for(var i=0; i<cantidad; i++){ // Generar un nuevo elemento. var nuevo = zoo[Math.floor((Math.random()*zoo.length))]; // Si el elemento no se encuentra en lote[] agregar (push), en caso // de que sea se encuentre (continue;), saltar al siguente. if(lote.indexOf(nuevo)!=-1){continue;} else {lote.push(nuevo);} } document.write(lote); }; selecLista();
Saludos
|
|
« Última modificación: 31 Julio 2013, 20:50 pm por drvy | BSM »
|
En línea
|
|
|
|
1mpuls0
Desconectado
Mensajes: 1.186
|
Bueno ya tienes dos alternativas. e.e la cantidad tambien era aleatoria? xD var zoo = ['Gato', 'Perro', 'Caballo', 'Ganso', 'Pez', 'Foca', 'Papagayo', 'Coyote', 'Milano', 'Nutria', 'Cotorra', 'Tigre']; var cantidad = 4; seleccionar(cantidad, zoo); function seleccionar(cantidad, zoo) { this.cantidad = cantidad; this.zoo = zoo; var tamano = zoo.length; var lote = new Array(); var indice = 0; do { var aleatorio = zoo[parseInt(Math.random()* tamano)]; if(lote.indexOf(aleatorio)!=-1){ continue; }else{ lote[indice]=aleatorio; indice++; } } while(lote.length < cantidad); alert(lote); }
Saludos.
|
|
« Última modificación: 31 Julio 2013, 21:26 pm por Darhius »
|
En línea
|
abc
|
|
|
Linton
Desconectado
Mensajes: 239
|
No entiendo porque generas dos random y esperas que coincidan ·_·
¡Qué torpe! Creí que no estaba generando otro random, sino citando el anterior. ¡Muchas gracias por tu ayuda! :-)
|
|
|
En línea
|
|
|
|
Linton
Desconectado
Mensajes: 239
|
e.e la cantidad tambien era aleatoria? xD
No, yo la había fijado en el for. Pero da igual, lo que me importa es que no se repitan :-) Uf en tu solución hay varias cosas que desconozco... Bueno, a estudiarla también :-) ¡Gracias mil por tu ayuda!
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Repetir una línea de código
.NET (C#, VB.NET, ASP)
|
Krata
|
5
|
4,896
|
27 Febrero 2008, 23:51 pm
por Sin Nick xD
|
|
|
repetir señal con router
Materiales y equipos
|
lukerico
|
5
|
3,233
|
12 Enero 2009, 00:28 am
por zydas
|
|
|
repetir archivo bat en x tiempo
Scripting
|
jwnieves
|
4
|
19,542
|
26 Enero 2010, 11:32 am
por jwnieves
|
|
|
repetir
Redes
|
javibrais
|
1
|
2,368
|
8 Septiembre 2012, 12:18 pm
por HdM
|
|
|
Repetir StringTokenizer?
Java
|
Slider324
|
2
|
2,749
|
11 Febrero 2013, 18:53 pm
por Slider324
|
|