6

私はJavaScriptとJSONが苦手であることを認めます。オブジェクトの数値を足し合わせたときにNaNが返される理由を理解するために、多くの時間を費やしてきました。それを念頭に置いて、以下は私のJSONであり、変数に格納されています。

var data = [
    {
        "acc_ext_id": null,
        "cat_code": 10002,
        "cat_ds": "REVENUE",
        "category_id": null,
        "chart_id": null,
        "created_at": null,
        "dept_id": null,
        "feb": null,
        "id": null,
        "jan": 30,
        "note": null,
        "total_cost": null,
        "updated_at": null,
        "year_id": null
    },
    {
        "acc_ext_id": "41260-02600",
        "cat_code": 10002,
        "cat_ds": "REVENUE",
        "category_id": 2,
        "chart_id": 2373,
        "created_at": "2013-01-15 16:43:52.169213",
        "dept_id": 86,
        "feb": 45,
        "id": 3,
        "jan": 60,
        "note": "Two",
        "total_cost": 105,
        "updated_at": "2013-01-15 16:43:52.169213",
        "year_id": 1
    }
]

次に、オブジェクトを反復処理して値を合計しようとします。

var jan;

for (var i=0;i<data.length;i++){ 
    if(data[i].jan != null){    
        jan += parseFloat(data[i].jan);
        console.log(jan);
    }
}

コンソールに印刷されNaNます。私はその数を解析し、生のままにしておこうとしましたが、役に立ちませんでした。オブジェクトに何か問題がありますか?説明するjsFiddleは次のとおりです。http://jsfiddle.net/5E2pm/3/

4

3 に答える 3

14
var jan = 0; //this should solve it

for (var i=0;i<data.length;i++){ 
    if(data[i].jan != null){    
        jan += parseFloat(data[i].jan);
        console.log(jan);
    }
}

これを試してみてください:)

以下のコメントでDONが引用した説明:

var jan; これにより、変数が未定義として宣言されるため、未定義の値を追加しようとするとNaNとして取得されるため、ここでvar jan = 0の答えが機能します– DON

于 2013-01-20T06:18:43.167 に答える
7

2021年

これはレデューサーの良い使い方です

const jan = data.reduce(function(total, current) {
 return total + current.jan;
}, 0); // starting value

古い答え

私はこのアプローチが好きです。基本的に、janが存在しない場合、最初の反復で値を0に設定します。

jan = (jan || 0) + parseFloat(data[i].jan);
于 2015-10-22T13:25:30.860 に答える
1

最初にjanを初期化する必要があります

var jan = 0; 

ここに例があります-リンク

于 2013-01-20T06:24:53.620 に答える