2012-04-19 21 views
0

I以下のJSONがあります 圧縮JSONオブジェクト

[{"state":"MN","value":10},{"state":"MN","value":10},{"state":"MN","value":10},{"state":"NY","value":8},{"state":"NY","value":8},{"state":"NY","value":8}] 

は私が次のように上記のJSONに変換することができますはJQuery/JSや他のHTML互換性のある言語での指示があると:

[{"state":"MN","value":[10,10,10]},{"state":"NY","value":[8,8,8]}] 

ありがとう!あなたに必要な出力が得られますルーピング以下

+2

元のオブジェクトを繰り返して、目的の出力を作成するだけです。 –

答えて

3

DEMO

var data = [{"state":"MN","value":10},{"state":"MN","value":10},{"state":"MN","value":10},{"state":"NY","value":8},{"state":"NY","value":8},{"state":"NY","value":8}]; 

var tmp = {}; 
var t; 
$.each (data, function (i, val) { 
    if (tmp.hasOwnProperty(val.state)) { 
     t = tmp[val.state]; 
     t.push(val.value); 
    } else { 
     tmp[val.state] = [val.value]; 
    } 
}); 

var output = []; 
for (i in tmp) { 
    output.push({'state': i, 'value': tmp[i]}); 
} 

証明:

enter image description here

+0

Dude、jQuery以外の答えを+1しているのは、まったく必要ない答えに '$ .each'を使うということですか?これ以外に、素敵なコード:) –

3

はあなたが使用することができます。

var input=[{"state":"MN","value":10},{"state":"MN","value":10},{"state":"MN","value":10},{"state":"NY","value":8},{"state":"NY","value":8},{"state":"NY","value":8}] 

var tmp={}, output=[]; 
while(o=input.pop()) (tmp[o.state] || (tmp[o.state]=[])).push(o.value); //you could even stop here if it is enough for you 
for(k in tmp) output.push({state:k,value:tmp[k]}); 
+1

+1簡体字版。ニース:) –

+0

私は全てを簡素化して最適化するのが好きです^^ – Tronix117

+0

あなたはオーバーランである配列 '.shift()'を呼び出しているので、私は最適化しません。代わりに要素をシフトしない '.pop'を使うことができます。しかしforループの反復は、この場合は一般的に読み込みを行うほど高速です。 –