0

次の JSON があります。

{ 
  "Foo": [{"total": 2000, year: 1}, {"total": 3400, year: 2}, {"total": 5000, year: 3}],
  "Bar": [{"total": 1000, year: 1}, {"total": 2400, year: 2}, {"total": 7000, year: 3}],
}

次の形式で必要です。

[
  { "Foo": 2000, "Bar": 1000, year: 1},
  { "Foo": 3400, "Bar": 2400, year: 2},
  { "Foo": 5000, "Bar": 7000, year: 3}
]

私たちが思いつくことができる最高のものは、率直に言って恥ずかしいものです:

var yearMap = {};

// Initialising the map of years eg. {1: { } , 2: {} .. }
for (var key in data) {
    var foos = data[key];
    $(foos).each(function(index, val) {
        yearMap[val.year] = { };
    });
}

// Iterates through the data and just puts the commission total against the year
for (var key in data) {
    var foos = data[key];
    $(foos).each(function(index, val) {
        yearMap[val.year][key] = val.total.value;
    });
}

誰でもよりクリーンなアプローチを思いつくことができますか?

4

1 に答える 1

1

私はそれをクリーナーとは呼びません(基本的に同じことをしています)が、データ全体で1回だけ反復します:

var yearMap = {};

$.each(data,function(k,v){
  $.each(v,function(kk,vv){
    if(!yearMap[vv.year])yearMap[vv.year]={};
    yearMap[vv.year][k]=vv.total
  });
});
于 2013-10-01T07:48:23.353 に答える