1

次の構造のオブジェクトがあります。

[ 
  {"vid":"aaa", "san":12}, 
  {"vid":"aaa", "san":18}, 
  {"vid":"aaa", "san":2}, 
  {"vid":"bbb", "san":33}, 
  {"vid":"bbb", "san":44}, 
  {"vid":"aaa", "san":100}
]

このオブジェクトは、変数SerializeData(inData)として呼び出される関数に渡されます。inData

function SerializeResults( inData ) {
    $.each( inData, function( i, val ) { ... })
} 

すべてのオブジェクトを繰り返してinData変換したいので、結果は次のようになります。

[ 
  { "vid":"aaa","san":[12,18,2,100] }, 
  { "vid":"bbb","san":[33,44] } 
]

それ、どうやったら出来るの?

4

4 に答える 4

2

そこに行きます:http://jsfiddle.net/hezgb/

    var data = [ {"vid":"aaa", "san":12}, {"vid":"aaa", "san":18}, {"vid":"aaa", "san":2}, {"vid":"bbb", "san":33}, {"vid":"bbb", "san":44}, {"vid":"aaa", "san":100}];

function SerializeResults( inData ) {

    var map = {};
    $.each( inData, function( i, val ) {
         if(!map[val.vid]){
             var o = {};
             o.san = [];
             map[val.vid] = o;
         }
        else{
            var o = map[val.vid];
        }

        o.san.push(val.san);
    });
    var main = [];
    $.each( map, function( key, val ) {
        main.push({vid:key,san:val.san});  
    });

    return main;
}

console.log(SerializeResults(data));
于 2013-03-24T16:41:30.397 に答える
1

これはどのように機能しますか?

http://jsfiddle.net/T7bZd/4/

    $.each( inData, function( i, val ) 
{
   if(typeof out[val.vid]==="undefined")
       out[val.vid] = new Array();
   out[val.vid].push(val.san);
});
于 2013-03-24T16:49:49.797 に答える
0

これを試して。

function SerializeResults( inData ) {
    var a = {};

    $.each(inData, function( i, val ) {
        var id = val['vid'];

        if (a[id]) {
            a[id]['san'].push(val['san']);
        } else {
            a[id] = {vid:id, san:[val['san']]};
        }
    });

    var aa = [];

    $.each(a, function(i, val) {
        aa.push(val);
    });

    return aa;
}
于 2013-03-24T16:47:39.477 に答える
0

「どうすればいいの?」と尋ねる罰の形として、さらに別の答えを追加します。;-)

var _ = require('underscore')
var json = '[ {"vid":"aaa", "san":12}, {"vid":"aaa", "san":18}, {"vid":"aaa", "san":2}, {"vid":"bbb", "san":33}, {"vid":"bbb", "san":44}, {"vid":"aaa", "san":100}]'

var grouped = _.groupBy(JSON.parse(json), function(z) {
  return z.vid
})

var result = _.pairs(grouped).map(function(item) {
  return { vid: item[0], san: _.pluck(item[1], 'san') }
})
于 2013-03-24T16:56:11.850 に答える