elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [JS] Random sin repetir
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: [JS] Random sin repetir  (Leído 17,182 veces)
Almapa

Desconectado Desconectado

Mensajes: 111


Ver Perfil
Re: [JS] Random sin repetir
« Respuesta #10 en: 1 Agosto 2013, 01:34 am »

Aquí va una posible solución para que no se repitan y con una longitud aleatoria que se puede determinar con el límite superior del bucle "for".

Código
  1. function selecLista() {
  2.    var zoo=['Gato','Perro','Caballo','Ganso','Pez','Foca','Papagayo','Coyote','Milano','Nutria','Cotorra','Tigre'];     //Array que contiene las palabras que pueden salir
  3.    var zoo2=new Array;    //Array con la misma longitud que la de "zoo" que tendra el valor 1 en la posición de la palabra que haya salido anteriormente
  4.    var lote=new Array;     //Array con los valores finales
  5.    var x;     //Variable estilo puntero que apuntará la posición del array que se pretende colocar para comprobar si ha sido puesta anteriormente o no.
  6. for(var k=0;k<Math.floor(Math.random()*zoo.length)+1;k++){     //Bucle for desde 0 hasta como máximo la longitud del array que contiene las palabras, es decir, la longitud de la variable lote podrá variar entre 1 y la longitud de la variables "zoo".  
  7.        x=Math.floor(Math.random()*zoo.length);     //Se apunta a una posición del Array "zoo"
  8.        while(zoo2[x]==1){     //Se comprueba que no haya estado colocada anteriormente
  9.            x=Math.floor(Math.random()*zoo.length);     //Si ha estado puesta anteriormente se apunta a otra posición.
  10.        }
  11.        lote[k]=zoo[x];     //Una vez se tiene una palabra no puesta anteriormente se añade al "lote"
  12.        zoo2[x]=1;     //Se registra que ha sido puesta en el array de registro.
  13.    }
  14.    document.write(lote);     // Se muestra la variable
  15. };
  16. selecLista()


Si utilizas esta función varias veces en el mismo proceso es posible que, tras la línea que muestra la variable, tengas que inicializar las variables "lote" y "zoo2".

Un saludo!


« Última modificación: 1 Agosto 2013, 01:38 am por Almapa » En línea

#!drvy


Desconectado Desconectado

Mensajes: 5.850



Ver Perfil WWW
Re: [JS] Random sin repetir
« Respuesta #11 en: 1 Agosto 2013, 03:08 am »

Aquí va una posible solución para que no se repitan y con una longitud aleatoria que se puede determinar con el límite superior del bucle "for".

Si utilizas esta función varias veces en el mismo proceso es posible que, tras la línea que muestra la variable, tengas que inicializar las variables "lote" y "zoo2".

Un saludo!

No entiendo la necesidad de declarar 1 array innecesario (zoo2) y dos bucles cuando se puede hacer perfectamente con un solo bucle (con un if) y un solo array que almacene las palabras necesarias...

Saludos


En línea

1mpuls0


Desconectado Desconectado

Mensajes: 1.186


Ver Perfil
Re: [JS] Random sin repetir
« Respuesta #12 en: 1 Agosto 2013, 04:07 am »

No entiendo la necesidad de declarar 1 array innecesario (zoo2) y dos bucles cuando se puede hacer perfectamente con un solo bucle (con un if) y un solo array que almacene las palabras necesarias...

Saludos

y 3 RAND :P

En línea

abc
Almapa

Desconectado Desconectado

Mensajes: 111


Ver Perfil
Re: [JS] Random sin repetir
« Respuesta #13 en: 1 Agosto 2013, 12:33 pm »

Toda la razón, no había visto lo que hacía la función index.Of.
Aquí mi corrección:

Código
  1. function selecLista() {
  2.    var zoo=['Gato','Perro','Caballo','Ganso','Pez','Foca','Papagayo','Coyote','Milano','Nutria','Cotorra','Tigre'];
  3.    var lote=new Array;
  4.    var x;
  5. for(var k=0;k<parseInt(Math.random()*zoo.length+1);k++){  
  6.        x=parseInt(Math.random()*zoo.length);
  7.        while(lote.indexOf(zoo[x])!=-1){
  8.            x=parseInt(Math.random()*zoo.length);
  9.        }
  10.        lote[k]=zoo[x];
  11.    }
  12.    document.write(lote);
  13. };
  14. selecLista()
En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Repetir una línea de código
.NET (C#, VB.NET, ASP)
Krata 5 4,672 Último mensaje 27 Febrero 2008, 23:51 pm
por Sin Nick xD
repetir señal con router
Materiales y equipos
lukerico 5 3,046 Último mensaje 12 Enero 2009, 00:28 am
por zydas
repetir archivo bat en x tiempo
Scripting
jwnieves 4 19,179 Último mensaje 26 Enero 2010, 11:32 am
por jwnieves
repetir
Redes
javibrais 1 2,185 Último mensaje 8 Septiembre 2012, 12:18 pm
por HdM
Repetir StringTokenizer?
Java
Slider324 2 2,624 Último mensaje 11 Febrero 2013, 18:53 pm
por Slider324
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines