2012-04-19 2 views
0

나는 다음과 같은 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

야, 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 루프 반복은 우리가 방금 읽었을 때 일반적으로이 경우 더 빠릅니다. –