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 回答