2012-08-17 77 views
1

我想遍歷一個json對象並對具有相同值的元素在不同數組中進行計數。這是我的目標循環通過json對象並在不同數組中對具有相同值的元素進行計數

var testconn = 
{"_total": 3, 
    "values": 
    [ 
     { 
      "articlesRead": [ 
       { "articleId": 1001 }, 
       { "articleId": 1002 }, 
       { "articleId": 1003 }, 
       { "articleId": 1004 }, 
       { "articleId": 1005 }, 
       { "articleId": 1006 } 
      ] 
     }, 
     { 
      "articlesRead": [ 
       { "articleId": 1001 }, 
       { "articleId": 1002 }, 
       { "articleId": 2001 }, 
       { "articleId": 2002 }, 
       { "articleId": 2003 }, 
       { "articleId": 2004 } 
      ] 
     }, 
     { 
      "articlesRead": [ 
       { "articleId": 1001 }, 
       { "articleId": 3001 }, 
       { "articleId": 3002 }, 
       { "articleId": 3003 }, 
       { "articleId": 3004 }, 
       { "articleId": 3005 } 
      ] 
     } 
    ] 
} 

的示例中,我要算ID的數組中有多少exsist。因此,對於這個例子,我有768,16: 1001×3 1002×2 1003 X 1 1004 X 1 2001 X 1 等

我通過我的對象循環這樣

for (i = 0; i < testconn.values.length; i++) { 
    var c = testconn.values[i]; 
    for (j = 0; j < c.articlesRead.length; j++) { 
     var a = c.articlesRead[j]; 
     for (var key in a) { 
      if (a[key] is bigger then 1) { 
       count a[key] 
      } 
      return number of 

     } 
    } 
} 

回答

3

只需使用一個對象的值存儲作爲重點,並增加它:

var id={}; 
for (var i = 0; i < testconn._total; i++) { 
    var c = testconn.values[i]; 
    for (j = 0; j < c.articlesRead.length; j++) { 
     var a = c.articlesRead[j]; 
     id[a.articleId]= id[a.articleId] ? ++id[a.articleId]: 1; 
    } 
} 
console.log(id); 
+0

非常好,這就是我一直在尋找的東西(是否需要注意if語句的常規形式?我不是很高級,並且想要了解你做了什麼) – pwavg 2012-08-17 14:11:43

+0

不要忘記投票並選擇答案 – shi 2012-08-17 14:15:05

+0

我使用三元運算符,它使事情變得更短,它與以下內容相同:if(id [a.articleId]){...} else {...} – shi 2012-08-17 14:31:47

0

這裏有一個簡單的方法去了解它,使用4嵌套的for循環,也許不是最有效的牛逼霍夫。

var list = testconn.values; 
var dict = {}; 


for(var i in list){ 
    for(var j in list[i]){ 
     for(var k in list[i][j]){ 
      for(var l in list[i][j][k]){ 
       var key = list[i][j][k][l]; 
       dict[key] = dict[key] ? ++dict[key] : 1; 
      } 
     } 
    } 
} 

Dict現在是你想要的關聯數組。

相關問題