2012-10-03 135 views
1

我想返回每個屬性的計數。例如,我想返回每個組中有多少人。因此,對於以下JSON,它將返回組1中的3人,組3中的3人,組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

就像一些評論說的,你必須遍歷「people」數組。把這個「功能」變成像我這樣的功能很容易,所以你可以指定你正在搜索的組,並找回人數。

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 

如果obj不是全局的,你可以將它傳遞給函數,它會是這樣:

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循環嗎?例如,將Xpath與XML文件一起使用,可以在數據加載後快速找到節點或數據樹的一部分。當然,對於大型數據集,XML很慢。只是想知道對於大型JSON文件最適合什麼? – windsurf88

1

您可以通過使用這樣的提取組:

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

從那裏,只需創建一個對象與這些鍵:

var group_count = {}; 

groups.forEach(function(value, index) { 
    if (value in group_count) { 
     group_count[value] += 1; 
    } else { 
     group_count[value] = 1; 
    } 
}); 

這會給你一個對象,其中包含每個組的出現次數。

此外,此代碼將無法使用IE8或更低版本,因此您必須在網絡上某處找到forEachmap填充。