2012-08-17 117 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现在是你想要的关联数组。

相关问题