2016-10-03 8 views
-1

私は3つのプロパティ(年、合計、per_capita)を持つオブジェクトの配列を持っています。 例:Javascriptオブジェクトのプロパティを文字列からintに変更する

0: Object 
    per_capita: "125.8" 
    total: "1007.2" 
    year: "2009" 

は、これらのプロパティは、文字列であり、私は配列を経て、int型に変換するループを作成したいです。しかし

for (i=0; i<data.length; i++){ 
    parseInt(data[i].year, 10) 
    parseInt(data[i].total, 10) 
    parseInt(data[i].per_capita, 10) 
} 

私はtypeof演算を行うとき(データは[0] .total)それはその文字列が言う: は、私は、次のループを試してみました。 プログラムの後半で問題が発生しています。正しいタイプではないため、値を正しく計算できないためです。 誰かが問題の原因を知っていますか?

+0

実際にはint floatではありませんか?あなたは精度を失っています。 –

答えて

2

parseIntオブジェクトを変更するのではなく、文字列を解析して整数を返します。解析された値をオブジェクトのプロパティに再度割り当てる必要があります。

for (i=0; i<data.length; i++){ 
    data[i].year = parseInt(data[i].year, 10) 
    data[i].total = parseInt(data[i].total, 10) 
    data[i].per_capita = parseInt(data[i].per_capita, 10) 
} 
0

これが役立ちます!

var a = { 
 
    per_capita: "125.8", 
 
    total: "1007.2", 
 
    year: "2009", 
 
} 
 

 
Object.keys(a).map(function(el){ 
 
    a[el] = parseInt(a[el]) 
 
}) 
 

 
console.log(a) 
 
console.log(typeof a.total)

1

あなたがしたすべては、変換したが、あなたは割り当てを逃した:

for (i=0; i<data.length; i++){ 
    data[i].year = parseInt(data[i].year, 10) 
    data[i].total = parseInt(data[i].total, 10) 
    data[i].per_capita = parseInt(data[i].per_capita, 10) 
} 

parseInt関数はint型の値を返し、それは入力変数を変更しません。

もう1つのこと - 浮動小数点数を必要とする場合はparseIntではなくparseFloat関数を使用する必要があります。

0

あなたは配列を反復することができ、オブジェクトamdはプロパティの整数値を割り当てます。

data.forEach(function (a) { 
    ['year', 'total', 'per_capita'].forEach(function (k) { 
     a[k] = Math.floor(+a[k]); 
    }); 
}); 
関連する問題