0

次のような API 応答からの JSON 文字列があります。

{ "legend_size": 1,
  "data": {
    "series": [ "2013-05-01", "2013-05-02" ],
    "values": {
        "Sign Up": {
            "2013-05-05": 10,
            "2013-05-04": 10
         }
     }
  }
}

「サインアップ」オブジェクトの値を合計したいと思います (10 + 10)。私が抱えている課題は、キーが一意であり、このようなことを行う方法を示す投稿のほとんどが、値の配列またはキーが一貫している (つまり、すべてのキーが「値」である) 例を示していることです。

Series 配列を使用してサインアップ オブジェクトをループする必要がありますか?

4

2 に答える 2

4

データをオブジェクトに解析済みであると仮定すると、次のように for ループを使用できます。

var json = {
    "legend_size": 1,
    "data": {
        "series": [ "2013-05-01", "2013-05-02" ],
        "values": {
            "Sign Up": {
                "2013-05-05": 10,
                "2013-05-04": 10
            }
        }
    }
};
var sum = 0;
for (x in json.data.values['Sign Up']) {
    sum += json.data.values['Sign Up'][x];
}

基本的に、json データをナビゲートして、必要な実際のデータを取得します...これが「サインアップ」オブジェクトです。次に、for/inループを使用して、そのオブジェクトが持つすべてのキーをループし、値を合計します。

于 2013-06-10T01:56:26.500 に答える
0

解析した後、 を使用して合計に到達する方法を次に示しArray.prototype.reduceます。

var vals = object.data.values["Sign Up"];

var result = Object.keys(vals)
                   .reduce(function(sum, key) {
                       return sum + vals[key]
                   }, 0);

.reduce()メソッドとメソッドには、IE8 以前の.keys()shim が必要です。

于 2013-06-10T02:00:03.233 に答える