0

小数点以下の数値の配列に変換する必要がある文字列の配列があります。文字列の配列は次のようになります。

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"] 

次のような各配列要素を解析する短い関数を作成しました。

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;
}

array.length をログに記録すると、値は 12 になります。for ループのログも、12 個の個別の値を返します。ただし、console.log(parsedArray) は、長さが 13 の次の配列を提供します (末尾のゼロに注意してください)。

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

この関数を改善する方法と、すべてのログが 12 の値を示しているにもかかわらず、ゼロを追加する理由について何か考えはありますか?

4

2 に答える 2

2

関数から返された各項目の値の新しい配列を返す配列メソッド マップ (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];

IE<9 をサポートする必要がある場合は、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;
    }
}
于 2013-06-26T14:12:53.083 に答える