0

私は次の機能を持っています:

function getAggregateData(){
        var sums = new Object();


    $.getJSON("example.json.php", function(data) {
           //for each month
           c = 0;
            $.each(data, function(key, val, index) {
                  //for each store
                $.each(val, function(key2, val2, index2) { 
                      if(c == 0){
                         sums[key2] = val2; 
                      }
                      else{
                         sums[key2] += val2; 
                      }

                });
                c++
            });

    })
    return sums;
}

私はそれを次のように呼びます:

var totals = getAggregateData();

しかし、ログをコンソールに表示すると、完全に困惑します。

console.log(totals)

次のようなオブジェクトが表示されます。

    store1  500
    store2  900
    store3  750
    and so on and so forth...

しかし、console.log(totals['store1')そうすると未定義になります。

私も試してみましたconsole.log(totals.store1)

console.log(totals[0].store1)

何らかのスコープの問題があるか、自分が思っているオブジェクトを作成していません。

4

2 に答える 2

0

与えられた:

{
    "1": {
        "store1": 2450,
        "store2": 1060,
        "store3": 310
    },
    "2": {
        "store1": 2460,
        "store2": 1760,
        "store3": 810
    }
};

各店舗の結果を追加する場合は、これでうまくいくはずです。

/**
* This functions need to be called when we have the data
*/
function processSums(obj){
    console.log(obj);
}

function getAggregateData(){

    var sums = {};

    $.getJSON("example.json.php", function(data) {
            $.each(data, function() {
                $.each(this, function(key, val, index){                
                    sums[key] = sums[key] || 0;
                    sums[key] += val;               
                });
            });
            // 4910
            processSums(sums);
    });

    return sums;
}

getAggregateData();
于 2013-10-26T00:07:47.760 に答える