2012-10-03 2 views
1

각 속성의 수를 반환하고 싶습니다. 예를 들어, 각 그룹에 얼마나 많은 사람들이 있는지를 알려 드리고 싶습니다. 따라서 다음 JSON의 경우 Group 1에서 3 명, Group 3에서 3 명, Group 16에서 2 명 등을 반환합니다.JSON의 각 항목 수 계산

Javascript 또는 jQuery 솔루션을 찾고 있습니다. 감사.

도움을 주시면 감사하겠습니다.

참고 : JSON 구문 분석에 도움이 필요하지 않습니다. 각 사건의 수를 찾는 데 도움이 필요합니다.

{ 
"people":[ 
    {"id":"0","name":"Mike Johnson","group":1}, 
    {"id":"1","name":"Bob Smith","group":2}, 
    {"id":"2","name":"Richard Thomas","group":3}, 
    {"id":"3","name":"Betty White","group":16}, 
    {"id":"4","name":"Tim Thompson","group":3}, 
    {"id":"5","name":"Carl Lewis","group":16}, 
    {"id":"6","name":"Kathy Towers","group":3}, 
    {"id":"7","name":"Billy Bob","group":1}, 
    {"id":"8","name":"Sally Bailey","group":1} 
    ] 
} 
+1

어떤 형식이나 방식으로 루프 외부에서 정의 된 카운트 변수를 증가시키는 for 루프로 루프를 반복해야 할 것입니다. –

+0

당신은 무엇을 시도 했습니까? JSON 문자열을 JavaScript 객체로 파싱하는 방법을 알고 있습니까? –

+0

@talnicolas 작동하지 않는 모든 것을 시도했습니다.) – relyt

답변

3

일부 의견에 말했듯이 "사람"배열을 반복해야합니다. 이 "기능"을 내가 가진 기능으로 전환하는 것은 쉽습니다. 그래서 당신은 찾고있는 그룹을 지정하고 사람들의 수를 되 찾을 수 있습니다. obj 글로벌없는 경우

http://jsfiddle.net/UdhRW/

var obj = { 
    "people": [ 
    {"id":"0","name":"Mike Johnson","group":1}, 
    {"id":"1","name":"Bob Smith","group":2}, 
    {"id":"2","name":"Richard Thomas","group":3}, 
    {"id":"3","name":"Betty White","group":16}, 
    {"id":"4","name":"Tim Thompson","group":3}, 
    {"id":"5","name":"Carl Lewis","group":16}, 
    {"id":"6","name":"Kathy Towers","group":3}, 
    {"id":"7","name":"Billy Bob","group":1}, 
    {"id":"8","name":"Sally Bailey","group":1} 
    ] 
}; 

function getCount(group) { 
    var count = 0; 
    for (var i = 0; i < obj.people.length; i++) { 
     if (obj.people[i].group == group) { 
      count++; 
     } 
    } 
    return count; 
} 

getCount(1); // should return 3 

, 당신은 함수에 전달할 수 있으며 다음과 같이 될 것이다 :

function getCount(arr, group) { 
    var count = 0; 
    for (var i = 0; i < arr.length; i++) { 
     if (arr[i].group == group) { 
      count++; 
     } 
    } 
    return count; 
} 

getCount(obj.people, 1); // should return 3 
+2

이것은 올바른 길로 나를 잡았습니다. 감사합니다 – relyt

+0

직접적인 도움이 답변을 주셔서 감사합니다. 대용량 데이터 세트가있는 경우 For 루프를 계속 사용 하시겠습니까? 예를 들어 XML 파일과 함께 Xpath를 사용하면 데이터가로드 된 후에 노드 또는 데이터 트리의 일부를 빠르게 찾을 수 있습니다. 물론 XML은 대용량 데이터 세트에서는 느립니다. 그냥 큰 JSON 파일로 무엇이 가장 좋을지 궁금하십니까? – windsurf88

1

당신은 이런 식으로 뭔가를 사용하여 그룹을 추출 할 수 있습니다 :

> var groups = foo['people'].map(function(value, index) {return value['group']}); 
[1, 2, 3, 16, 3, 16, 3, 1, 1] 

거기에서 객체를 만듭니다.

이렇게하면 각 그룹의 발생 횟수를 포함하는 개체를 얻을 수 있습니다.

또한이 코드는 IE8 이하에서는 작동하지 않으므로 웹 어디에서나 forEachmap 폴리필을 찾아야합니다.