analizar números en una matriz de JavaScript
-
24-09-2019 - |
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?
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]);
}