2012-07-04 3 views
0
여기

내 자바 스크립트입니다 : 나는 같은 bulan 값에 얼마나 많은 type을 계산하려는특정 JSON 개체 값에서 배열을 계산하는 방법은 무엇입니까?

var json = '{"GetReportIdResult":[{"bulan":"4","total":"1728","type":"CHEESE1K","uang":"8796383"},{"bulan":"4","total":"572476","type":"ESL","uang":"5863408410"},{"bulan":"4","total":"33507","type":"WHP","uang":"235653242"},{"bulan":"5","total":"4761","type":"CHEESE1K","uang":"134877865"},{"bulan":"5","total":"245867","type":"UHT","uang":"1446787280"},{"bulan":"5","total":"47974","type":"WHP","uang":"631929807"},{"bulan":"6","total":"5762","type":"CHEESE1K","uang":"293393832"},{"bulan":"6","total":"236803","type":"UHT","uang":"2219506085"},{"bulan":"6","total":"24853","type":"WHP","uang":"386175022"}]}'; 
obj = JSON.parse(json); 
var arrayobj = obj.GetReportIdResult.length; 
alert (arrayobj); 

(예를 들면가 3 type = CHEESE1K, UHTbulan = 4 ESL)

방법 하기 위해서?

+0

당신의'json' 변수는 실제로 JSON (문자열)이 아니고 객체에 대한 참조가 할당되어 있으므로'JSON.parse (json)'을 사용할 필요가 없습니다. – nnnnnn

+0

@nnnnnn 작전, 내 잘못 .. 하하, 나는 그것에 대해 잊어 버린다. : p 너에게 상기시켜 주셔서 감사합니다. – blankon91

+0

이 데이터에 빈 배열 요소가 있습니다! –

답변

2

당신의 JSON에 오타가 여전히있다 : 당신은 처음 두 "bulan":"6" 객체 사이에 연속으로 두 개의 쉼표를 가지고있다. 그러나 당신이 그 문제를 해결 가정 ...

당신이 이런 식으로 뭔가 할 수있는 특정 bulan 값을 구별 유형을 계산하는 방법을 묻는 경우 : 배열을 통해

function countTypesForBulan(resultArray, bulanVal) { 
    var i, 
     types, 
     count = 0; 
    for (i=0, types = {}; i < resultArray.length; i++) 
     if (resultArray[i].bulan === bulanVal && !types[resultArray[i].type]) { 
     types[resultArray[i].type] = true; 
     count++; 
     } 
    return count; 
} 

console.log(countTypesForBulan(obj.GetReportIdResult, "4")); // logs 3 

위의 루프가 찾고를 특정 bulan 값을 검색하고 관련 유형을 이미 확인했는지 여부를 확인합니다. 일치하지 않는 경우 types 객체에 추가하고 카운터를 증가시킵니다.

데모 : http://jsfiddle.net/pAWrT/

+0

나는 그것을보십시오 'Uncaught ReferenceError : type is not defined' 오류 로그가 표시됩니다. – blankon91

+0

죄송합니다. 업데이트 된 버전을 사용해보십시오. 나는'resultArray [i] .type'를 뜻하는 곳에 실수로'type'을 넣었습니다. 데모에서 볼 수 있듯이 고정되어 있습니다. – nnnnnn

+0

이제 작동 :) :) – blankon91

1

우선 JSON을 문자열 에 넣으십시오. 그렇지 않으면 예제 코드가 제대로 작동하지 않습니다.

var json = '{ "GetReportIdResult": [{ "bulan": "4", "total": "1728", "유형": "CHEESE1K", "uang": "8796383" bulan ":"4 ","total ":"572476 ","type ":"ESL ","uang ":"5863408410 "}, {"bulan ":"4 ","total ":"33507 " "유형": "CHEESE1K", "uang": "134877865"}, 유형 : "WHP", "uang": "235653242"}, { "bulan": "5", "total": "4761" { "bulan": "5", "total": "245867", "type": "UHT", "uang": "1446787280"} { "bulan": "5", "total": "47974" , "type": "WHP", "uang": "631929807"}, { "bulan": "6", "total": "5762", "type": "CHEESE1K", "uang": "293393832" }, { "bulan": "6", "total": "236803", "type": "UHT", "uang": "2219506085" "24853", "type": "WHP", "uang": "386175022"}]} '';

다음으로 for으로 반복하고 변수 또는 해시 맵을 계산하십시오. GetReportIdResult 이후

배열, 당신 할 수 있습니다

for(var i : obj.GetReportIdResult){ 
    obj.GetReportIdResult[i] ... // Use at will. 
+0

당신은 거기에 자바 구문을 가지고있는 것 같습니다 :) –

+0

당신의 답변을 주셔서 감사합니다 :)하지만 난 아직도 내가 원하는 것을 얻기 위해 그것을 사용하는 방법을 이해하지 못했습니다 – blankon91

1

이 당신에게 각 bulan 값의 수를 포함하는 map 객체를 제공 할 것입니다. 예를 들어, map['4'].count 3.

var i, row, arr = obj.GetReportIdResult, map = {}; 
for (i = 0; i < arr.length; i++) { 
    row = arr[i]; 
    map[row.bulan] = map[row.bulan] || {count: 0}; 
    if (map[row.bulan][row.type] === undefined) { 
     map[row.bulan][row.type] = row.type; 
     map[row.bulan]['count'] += 1; 
    } 
} 
console.log (JSON.stringify(map));​ 

JSFiddle here를 반환합니다.

+1

글쎄, 결과는 내가 원하는 것과 같지 않다. 그러나이 코드는 나에게 매우 유용하다. 왜냐하면이 후에 객체를 매핑해야하기 때문이다 : D 대단히 감사합니다. – blankon91

관련 문제