Pregunta

Hola, tengo una cadena de números separados por comas, "100,200,300,400,500" que estoy dividiendo en una matriz usando la función dividida de JavaScript:

var data = [];
data = dataString.split(",");

Estoy tratando de analizar los valores de la matriz usando Parsefloat y luego guardarlos nuevamente en la matriz. Luego me gustaría agregar los números en la matriz y almacenarlo como otra variable, "DataSum".

Tengo el siguiente código, pero no puedo hacer que funcione:

var dataSum = "";

for (var i=0; i < data.length; i++) {
    parseFloat(data[i]);
    dataSum += data[i];
}

Entonces, al final de todo esto, debería poder acceder a cualquiera de los números analizados individualmente datos [0], datos [1], etc. y tener un número total para DataSum. ¿Qué estoy haciendo mal?

¿Fue útil?

Solución

(1)

var dataSum = "";

Estás inicializando dataSum como una cadena. Para cuerdas, el += es un operador de concatenación, por lo que obtendrá 100200300400500 por concatenación. Deberías inicializarlo a 0:

var dataSum = 0;

(2)

parseFloat no modifica el parámetro de entrada. Se devuelve el valor flotante. Entonces deberías usar

dataSum += parseFloat(data[i]);

(3)

var data = [];
data = dataString.split(",");

La segunda asignación anulará la primera. Solo escribe

var data = dataString.split(",");

(Por cierto, Ecmascript 5 admite esta línea de un solo:

return "100,200,300,400,500".split(/,/).map(parseFloat).reduce(function(x,y){return x+y;})

)

Otros consejos

Parsefloat devuelve un valor, que debe usar para hacer su cálculo, también debe inicializar su variable de datos en un valor numérico.

var dataSum = 0;

for (var i=0; i < data.length; i++) {
    var current = parseFloat(data[i]);
    dataSum += current;
    // to save back onto array
    // data[i] = current;
}

Tu estas usando parseFloat Pero no asignar el resultado a nada.

De WCSchools:

La función parsefloat () analiza una cadena y devuelve un número de punto flotante.

Además, agregar un número a una cadena concatinará los resultados, por lo que debe predecir dataSum a 0, no a "".

var dataSum = 0.0;

for (var i=0; i < data.length; i++) {
    dataSum += parseFloat(data[i]);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top