Comunidad de diseño web y desarrollo en internet online

bucle

Citar            
MensajeEscrito el 22 Feb 2013 07:40 pm
hola a tod@s

queria saber si alguien me podria ayudar con un bucle con el que no acabo de aclararme. igual la solucion es evidente pero no la veo...

tengo las siguientes variables:

Código Javascript :

var arr = [35,15,4]
var num = 54; //35+15+4

var valor;


la variable "valor" tendra, segun otras funciones, un valor u otro. el codigo que sigue es el bucle que me funciona pero, si la variable arr fuera mayor, tendria que ir añadiendo lines y queria ver si se podia solucionar de alguna manera:

Código Javascript :

for (var i = 0; i < num; i++) {
   if (valor >= 0 && valor < 35) {
      document.write(num[0]);
   }
   if (valor >= 35 && valor < 49) {
      document.write(num[1]);
   }
   if (valor >= 49 && valor < 53) {
      document.write(num[2]);
   }
}


si valor esta entre 0 y 32, obtendre el valor 0 del array, y asi sucesivamente...
alguien podria ayudarme a simplificar este bucle?
la solucion seria esta pero los valores que me faltan, marcados con ?? no los llego a distinguir...

Código Javascript :

for (i = 0; i < total; i++) {
   for (j = 0; j < num.length; j++) {
      if (valor >= ?? && valor < ??) {
         document.write(num[??]);
      }
   }
}


milchisimas gracias

Por kaquna

68 de clabLevel



Genero:Femenino  

safari
Citar            
MensajeEscrito el 22 Feb 2013 08:37 pm
valor, no tiene valores, asi q es dificil compararla con nada, num.length esta mal, xq num es un numero solo, por ende siempre sera 1 el length, se usa para arrays, si valor tuviera un valor el primero bucle que publicaste andaria perfecto. saludos.

Por skaterseba

Claber

170 de clabLevel



 

chrome
Citar            
MensajeEscrito el 22 Feb 2013 08:43 pm
perdon, me equivoque:

el codigo que funciona:

Código Javascript :

for (var i = 0; i < num; i++) {
   if (valor >= 0 && valor < 35) {
      document.write(arr[0]);
   }
   if (valor >= 35 && valor < 49) {
      document.write(arr[1]);
   }
   if (valor >= 49 && valor < 53) {
      document.write(arr[2]);
   }
}


el que quiero conseguir:

Código Javascript :

for (i = 0; i < num; i++) {
   for (j = 0; j < arr.length; j++) {
      if (valor >= ?? && valor < ??) {
         document.write(arr[??]);
      }
   }
}

Por kaquna

68 de clabLevel



Genero:Femenino  

safari
Citar            
MensajeEscrito el 22 Feb 2013 11:05 pm
no se exactamente que queres lograr jajaja, pero lo q yo pondria ahi es

if(valor >= arr[j]) osea, comparalo con el valor de arr con indice J

Por skaterseba

Claber

170 de clabLevel



 

chrome
Citar            
MensajeEscrito el 23 Feb 2013 06:39 am
lo que quiero conseguir es lo que me da este bucle

Código Javascript :

var arr = [35,15,4];
var num = 54; //35+15+4
var valor; //vendra dado por otras funciones

for (var i = 0; i < num; i++) {
   if (valor >= 0 && valor < 35) {
      document.write(arr[0]);
   }
   if (valor >= 35 && valor < 49) {
      document.write(arr[1]);
   }
   if (valor >= 49 && valor < 53) {
      document.write(arr[2]);
   }
}

cuando "valor" este entre 0 y 35 (de 0 a arr[0]) que me devuelva el contenido de la posicion 0 de "arr"
cuando "valor" este entre 35 y 49 (de arr[0] a (arr[0]+arr[1])) que me devuelva el contenido de la posicion 1 de "arr"
cuando "valor" este entre 49 y 53 (de (arr[0]+arr[1]) a (arr[0]+arr[1]+arr[2])) que me devuelva el contenido de la posicion 2 de "arr"

para tres valores me vale como lo tengo, pero si "arr" fuera mas largo, para no tener que añadir mas lineas dentro del bucle, ¿como podria simplificarse?
creo que debe ser algo asi pero no acabo de verlo...

Código ActionScript :

for (i = 0; i < num; i++) {
   for (j = 0; j < arr.length; j++) {
      if (valor >= ?? && valor < ??) {
         document.write(arr[??]);
      }
   }
}

gracias

Por kaquna

68 de clabLevel



Genero:Femenino  

safari
Citar            
MensajeEscrito el 23 Feb 2013 03:39 pm
creo q vos mismo estas diciendo la rta, proba con ponr en el primer valor, a[i] y en la segunda condicion, a[i] + a[i + 1] fijate que sale con eso.

Por skaterseba

Claber

170 de clabLevel



 

chrome
Citar            
MensajeEscrito el 23 Feb 2013 04:22 pm
muchas gracias por tus respuestas

pero no funciona, no es esa la solucion... segun la funcion que me funciona:

Código Javascript :

for (var i = 0; i < num; i++) {
   if (valor >= 0 && valor < 35) { document.write(arr[0]); }
   if (valor >= 35 && valor < 50) { document.write(arr[1]); }
   if (valor >= 50 && valor < 55) { document.write(arr[2]); }
}

el primer ?? debe seguir la siguiente relacion:

Código Javascript :

arr[0] - arr[0] = 0
arr[0] + arr[1] - arr[1] = 35
arr[0] + arr[1] + arr[2] - arr[2] = 50
...

y el segundo ??, la siguiente:

Código Javascript :

arr[0] = 35
arr[0] + arr[1] = 50
arr[0] + arr[1] + arr[2] = 55
...

Por kaquna

68 de clabLevel



Genero:Femenino  

safari
Citar            
MensajeEscrito el 27 Feb 2013 11:55 am
Lo mejor sería hacer una programación que hubiera que cambiar lo más mínimo o nada, a mi se me ocurre así:

Código Javascript :

//En valores almacenamos los valores que deseas probar
var valores = [35, 15, 36, 59, 84, 125],
    //Y en otro array los rangos con los que probar
    rangos = [53, 35, 49, 250, 66];

/**
    Lo primero sería ordenar el array de los límites
    por si no estuviera ordenado
    
    Si simplemente usasemos sort,
    lo ordenaría por orden alfabético
    con lo que 150 sería menor que 4 y que 27
    
    Creamos la típica función para ordenar para ints
**/
function ordenarInts(a, b) {return a-b}

//Ahora ordenamos el array de los rangos con la función
var ordenado = rangos.sort(ordenarInts);

/**
    Creamos otro array
    donde guardaremos los rangos de los valores
**/
var resultados = Array();

/**
    Ahora sólo nos queda testear los valores
    y devolver el rango correspondiente
**/

//Por cada valor en nuestros valores
for (var a in valores)
    //Lo testeamos contra todos nuestros rangos
    for (var b in rangos)
        /**
            Al haber ordenado el array vamos de menor a mayor,
            si el valor es mayor, vamos directamente
            al siguiente paso del bucle
        **/
        if (valores[a] > rangos[b]) continue;
        //Si el valor es menor
        else {
            //lo almacenamos en nuestro array
            resultados.push(rangos[b]);
            //Y rompemos el ultimo bucle
            break;
        }
        
/*
    Y ahora imprimamos a ver que sale
*/
for (var a in resultados)
    console.log(
        'El rango de '+valores[a]+' es --> '+resultados[a]
    );

/*****PRINT
    El rango de 35 es --> 35
    El rango de 15 es --> 35
    El rango de 36 es --> 49
    El rango de 59 es --> 66
    El rango de 84 es --> 250
    El rango de 125 es --> 250 
*****/

Espero te sirva,
Un saludo.

Por Abducted

Claber

489 de clabLevel

3 tutoriales

Genero:Masculino  

Mentalidad Renovada

chrome
Citar            
MensajeEscrito el 06 Mar 2013 09:22 pm
muchas gracias, abducted!

Por kaquna

68 de clabLevel



Genero:Femenino  

safari

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.