Pregunta

I have an array of strings that I need to convert to an array of numbers with decimals. The array of strings looks like this:

var array = ["  169.70", "  161.84", "  162.16", "  176.06", "  169.72", "  170.77", "  172.74", "  175.73", "    0.00", "    0.00", "    0.00", "    0.00"] 

I have created a short function to parse each array element that goes like this:

function parseFloatArray(array) {
    var parsedArray = [];
        for (var i = 0; i < array.length ; i++) {
            parsedArray[i] = parseFloat(array[i]);
            parsedArray.push(parsedArray[i]);           
            console.log(parsedArray[i]);
        };
    return parsedArray;
}

Logging array.length gives me a value of 12. The log in the for loop also returns 12 individual values. However, console.log(parsedArray) gives me the following array with a length of 13 (Note the trailing zero):

[169.7, 161.84, 162.16, 176.06, 169.72, 170.77, 172.74, 175.73, 0, 0, 0, 0, 0] 

Any thoughts on how I can improve this function and why it would append a zero, despite all the logs showing 12 values?

¿Fue útil?

Solución

It may be a good use of the array method map, which returns a new array of each item's value returned from a function (eg, parseFloat):

    var array= ["  169.70", "  161.84", "  162.16", "  176.06", "  169.72", 
"  170.77", "  172.74", "  175.73", "    0.00", "    0.00", "    0.00", "    0.00"];

var parsedArray= array.map(parseFloat);
>>>value: (Array)     
[169.7, 161.84, 162.16, 176.06, 169.72, 170.77, 172.74, 175.73, 0, 0, 0, 0];

If you must support IE<9, you can supply a sub for map-

Array.prototype.map= Array.prototype.map || function(fun, scope){
    var T= this, L= T.length, A= Array(L), i= 0;
    if(typeof fun== 'function'){
        while(i<L){
            if(i in T){
                A[i]= fun.call(scope, T[i], i, T);
            }
            ++i;
        }
        return A;
    }
}

Otros consejos

Just put them once:

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