Suma aleatoria de array

Disculpe una pregunta como le puede hacer para que el array para sumar que me construyo me sume valores aleatoriamenta por ejemplo si meto valores de la posición 0 a la 6 y de la 7 a la 10 dejo en blanco y después en la posición 11 meto otro valor se puede realizar la suma del 0 al 6 + 11 y como seria?
function total()  
 { 
var arrayValores = new Array();  
  arrayValores[0]=parseFloat(document.getElementById('val4').value);  
  arrayValores[1]=parseFloat(document.getElementById('val7').value);  
  arrayValores[2]=parseFloat(document.getElementById('val10').value);  
  arrayValores[3]=parseFloat(document.getElementById('val13').value);  
  arrayValores[4]=parseFloat(document.getElementById('val16').value);  
  arrayValores[5]=parseFloat(document.getElementById('val19').value);  
  arrayValores[6]=parseFloat(document.getElementById('val22').value);  
  arrayValores[7]=parseFloat(document.getElementById('val25').value);  
  arrayValores[8]=parseFloat(document.getElementById('val28').value);  
  arrayValores[9]=parseFloat(document.getElementById('val31').value);
  arrayValores[10]=parseFloat(document.getElementById('val37').value);
 arrayValores[11]=parseFloat(document.getElementById('val40').value);
arrayValores[12]=parseFloat(document.getElementById('val43').value); 
arrayValores[13]=parseFloat(document.getElementById('val46').value);
arrayValores[14]=parseFloat(document.getElementById('val49').value);
arrayValores[15]=parseFloat(document.getElementById('val52').value);
arrayValores[16]=parseFloat(document.getElementById('val55').value);
arrayValores[17]=parseFloat(document.getElementById('val58').value);
arrayValores[18]=parseFloat(document.getElementById('val61').value);
arrayValores[19]=parseFloat(document.getElementById('val64').value);
arrayValores[20]=parseFloat(document.getElementById('val67').value);
arrayValores[21]=parseFloat(document.getElementById('val70').value);
arrayValores[22]=parseFloat(document.getElementById('val73').value);
arrayValores[23]=parseFloat(document.getElementById('val76').value);
arrayValores[24]=parseFloat(document.getElementById('val79').value);
arrayValores[25]=parseFloat(document.getElementById('val82').value);
arrayValores[26]=parseFloat(document.getElementById('val85').value);
arrayValores[27]=parseFloat(document.getElementById('val88').value);
arrayValores[28]=parseFloat(document.getElementById('val91').value);
arrayValores[29]=parseFloat(document.getElementById('val34').value);   
var suma=0; 
for (ix=0; ix<arrayValores[ix]; ix++){  
suma += arrayValores[ix];  

document.getElementById('tot').value= suma; 
}

1 respuesta

Respuesta
1
Lo que quieres hacer no es una suma aleatoria. Simplemente quieres sumar los valores que sean distintos de blanco. Para ello, te recomiendo que metas esta función en el head de tu página, donde tienes el resto de scripts:
<script>
function stringToFloat(str){
if (str==""){return 0;}
else{return parseFloat(str);}
}
</script>

Con esto lo que se consigue es que si el campo está vacío, se trate como un 0, para que no afecte a la suma. Luego, cuando rellenes el array, para cada elemento, llama a stringToFloat() de esta manera:
arrayValores[0] = stringToFloat(document.getElementById('val4').value);
[size= small; font-family: Times New Roman]Ok muchas gracias amigo lo puse de esta forma[/size]
function total()  
 { 
var arrayValores = new Array();  
  arrayValores[0]=stringToFloat(document.getElementById('val4').value);  
  arrayValores[1]=stringToFloat(document.getElementById('val7').value);  
  arrayValores[2]=stringToFloat(document.getElementById('val10').value);  
  arrayValores[3]=stringToFloat(document.getElementById('val13').value);  
  arrayValores[4]=stringToFloat(document.getElementById('val16').value);  
  arrayValores[5]=stringToFloat(document.getElementById('val19').value);  
  arrayValores[6]=stringToFloat(document.getElementById('val22').value);  
  arrayValores[7]=stringToFloat(document.getElementById('val25').value);  
  arrayValores[8]=stringToFloat(document.getElementById('val28').value);  
  arrayValores[9]=stringToFloat(document.getElementById('val31').value);
  arrayValores[10]=stringToFloat(document.getElementById('val37').value);
 arrayValores[11]=stringToFloat(document.getElementById('val40').value);
arrayValores[12]=stringToFloat(document.getElementById('val43').value); 
arrayValores[13]=stringToFloat(document.getElementById('val46').value);
arrayValores[14]=stringToFloat(document.getElementById('val49').value);
arrayValores[15]=stringToFloat(document.getElementById('val52').value);
arrayValores[16]=stringToFloat(document.getElementById('val55').value);
arrayValores[17]=stringToFloat(document.getElementById('val58').value);
arrayValores[18]=stringToFloat(document.getElementById('val61').value);
arrayValores[19]=stringToFloat(document.getElementById('val64').value);
arrayValores[20]=stringToFloat(document.getElementById('val67').value);
arrayValores[21]=stringToFloat(document.getElementById('val70').value);
arrayValores[22]=stringToFloat(document.getElementById('val73').value);
arrayValores[23]=stringToFloat(document.getElementById('val76').value);
arrayValores[24]=stringToFloat(document.getElementById('val79').value);
arrayValores[25]=stringToFloat(document.getElementById('val82').value);
arrayValores[26]=stringToFloat(document.getElementById('val85').value);
arrayValores[27]=stringToFloat(document.getElementById('val88').value);
arrayValores[28]=stringToFloat(document.getElementById('val91').value);
arrayValores[29]=stringToFloat(document.getElementById('val34').value);   
var suma=0; 
for (ix=0; ix<arrayValores[ix]; ix++){  
suma += arrayValores[ix];  

document.getElementById('tot').value= suma; 
}  
pregunta tengo otras funciones que tambien calculan y estan relacionadas con total()
tambien a dichas funciones les debo poner stringToFloat
son varias similares a estas funciones
function presta58()
 {
  valor1=parseFloat(document.getElementById('val1').value);
  valor2=parseFloat(document.getElementById('val89').value);
  document.getElementById('val90').value= valor1 * valor2 ;
   }
function presta59()
 {
 var selectPrecio = document.getElementById('costo4');
  valor1=parseFloat(document.getElementById('val90').value);
  valor2=parseFloat(selectPrecio.options[selectPrecio.selectedIndex].text);  
  document.getElementById('val91').value= valor1 * valor2 ;
   }  
Saludos y gracias
Jorge Sánchez
Usa stringToFloat() siempre que quieras transformar un valor a float, y si está vacío, que retorne 0. La aplicación depende de ti.
Muchas gracias amigo  en verdad deje la funcion total tal cual solo que cuando por decir sumo los 5 primeros elementos del array y luego dejo un elemento en blanco y al siguiente elemento pongo otra cantidad me sigue sin sumar esa cantidad
seria algo asi [0]5+[1]5+[2]5+[3]5+[4]5+[5]    +[6]5=25
La posición 6 no la suma que en la función seria val22 pareciera con una posición en blanco me corta la suma o la termina
Saludos y Gracias
Atentamente
Jorge Sánchez
Prueba a modificar la función que te pasé:

<script> 
function stringToFloat(str){ 

var resStr = "0";
var resFloat;
if (str && str!=""){resStr=str;}

try{resFloat = parseFloat(resStr);}
catch(e){resFloat = parseFloat("0");}
return resFloat;

</script>

Mira a ver si te funciona ahora.
Hola gracias amigo no tendre algun error en el codigo de la funcion total porque sigue igual como el ejemplo que te ponia arriba es decir si sumo 5+14+10+10=39 pero si hago esto 5+14+ +10=19 no me suma los numeros despues del espacio en blanco
A la mejor puse algo mal en la funcion
function total()  
 { 
var arrayValores = new Array();  
  arrayValores[0]=stringToFloat(document.getElementById('val4').value);  
  arrayValores[1]=stringToFloat(document.getElementById('val7').value);  
  arrayValores[2]=stringToFloat(document.getElementById('val10').value);  
  arrayValores[3]=stringToFloat(document.getElementById('val13').value);  
  arrayValores[4]=stringToFloat(document.getElementById('val16').value);  
  arrayValores[5]=stringToFloat(document.getElementById('val19').value);  
  arrayValores[6]=stringToFloat(document.getElementById('val22').value);  
  arrayValores[7]=stringToFloat(document.getElementById('val25').value);  
  arrayValores[8]=stringToFloat(document.getElementById('val28').value);  
  arrayValores[9]=stringToFloat(document.getElementById('val31').value);
  arrayValores[10]=stringToFloat(document.getElementById('val37').value);
 arrayValores[11]=stringToFloat(document.getElementById('val40').value);
arrayValores[12]=stringToFloat(document.getElementById('val43').value); 
arrayValores[13]=stringToFloat(document.getElementById('val46').value);
arrayValores[14]=stringToFloat(document.getElementById('val49').value);
arrayValores[15]=stringToFloat(document.getElementById('val52').value);
arrayValores[16]=stringToFloat(document.getElementById('val55').value);
arrayValores[17]=stringToFloat(document.getElementById('val58').value);
arrayValores[18]=stringToFloat(document.getElementById('val61').value);
arrayValores[19]=stringToFloat(document.getElementById('val64').value);
arrayValores[20]=stringToFloat(document.getElementById('val67').value);
arrayValores[21]=stringToFloat(document.getElementById('val70').value);
arrayValores[22]=stringToFloat(document.getElementById('val73').value);
arrayValores[23]=stringToFloat(document.getElementById('val76').value);
arrayValores[24]=stringToFloat(document.getElementById('val79').value);
arrayValores[25]=stringToFloat(document.getElementById('val82').value);
arrayValores[26]=stringToFloat(document.getElementById('val85').value);
arrayValores[27]=stringToFloat(document.getElementById('val88').value);
arrayValores[28]=stringToFloat(document.getElementById('val91').value);
arrayValores[29]=stringToFloat(document.getElementById('val34').value);   
var suma=0; 
for (ix=0; ix<arrayValores[ix]; ix++){  
suma += arrayValores[ix];  

document.getElementById('tot').value= suma; 
}  
Saludos y gracias
Atentamente
Jorge Sánchez
En efecto, el bucle está mal. Te pongo el bucle correcto:


for (ix=0; arrayValores[ix]; ix++){   
suma += arrayValores[ix];   
}

Un saludo: Carlos.
Hola amigo lamentablemente sigue sin funcionar es decir me pasa lo mismo
 [0]5+[1]5+[2]5+[3]5+[4]5+[5]    +[6]5=25
Que más podrá ser
Saludos y Gracias
Jorge Sánchez
Haz una prueba: mete un alert dentro del bucle para ver que hay en cada elemento del array:
for (ix=0; arrayValores[ix]; ix++){
alert("elemento " + ix + "=" + arrayValores[ix]);    
suma += arrayValores[ix];    
}

Me cuentas lo que sale, ¿ok?
Hola Buenos Días y felicidades por ser los Campeones del Mundo, que gran selección tiene Madre Patria España
Bueno ya probé el alert y me arroja en un mensaje los valores que voy metiendo en cada text del array lo curioso es que en el text que dejo en blanco no me arroja ningún valor y si en el siguiente text pongo un valor ya no lo reconoce en el alert solo los números introducidos antes del que esta en blanco
Saludos y Gracias
Jorge Sánchez
Esto me tiene intrigado. Quita la traza que pusiste y vamos a poner una en la función que convierte a float:

<script>  
function stringToFloat(str){  
var resStr = "0"; 
var resFloat; 
if (str && str!=""){resStr=str;} 
try{resFloat = parseFloat(resStr);} 
catch(e){resFloat = parseFloat("0");}

alert("stringToFloat('" + str + "')=" + resFloat); 
return resFloat; 
}  
</script>

Lo cambias y me cuentas lo que sale para el campo sin valor.
Ok Muchas gracias amigo ahora con muestra en un alert cada elemento del array en los que tengo números pone el numero correspondiente y en los que están en blanco muestra un 0 lo pero sigue sin sumar los números después de los elementos del array que están en blanco
Saludos y Gracias
Jorge Sánchez
Ok, por si acaso, vamos a cambiar la condición del bucle, por si ahora cuando se encuentra un 0 se sale:
for (ix=0; ix<arrayValores.length; ix++){ 
alert("elemento " + ix + "=" + arrayValores[ix]);     
suma += arrayValores[ix];     
}

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas