2016-08-02 67 views
-1

这是我的JSON数组我需要专案编号的计数(未长度阵列的)。我是期望计数为2,因为JSON阵列元素计数

[{ 
 

 
\t "oid": "1", 
 
\t "oname": "Fontbyte", 
 
\t "bun": [{ 
 
\t \t "projectid": "1", 
 
\t \t "bname": "euuu", 
 
\t \t "dep": [{ 
 
\t \t \t "did": "1", 
 
\t \t \t "dname": "Development department" 
 

 

 
\t \t }, { 
 
\t \t \t "did": "2", 
 
\t \t \t "dname": "prod" 
 

 
\t \t }] 
 
\t }, { 
 
\t \t "projectid": "2", 
 
\t \t "bname": "USs", 
 
\t \t "dep": [] 
 
\t }] 
 
}]
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

阵列具有2 projectid.how它是可能的jQuery或JavaScript?

+0

你尝试过什么吗?像一个'在数组中的foreach - >已投影吗?' – AxelH

+0

尚未.......... –

+0

所以你没有尝试过任何东西?这并不完全是Stackoverlow的工作原理...... – AxelH

回答

1

尝试循环中的对象,如:

count = 0; 
$.each(obj[0].bun,function(i,v){ 
$.each(v,function(x,t){ 
if (x == 'projectid') { 
count+=1 
}; 
}); 
}); 
console.log(count); 
0

如果您知道哪里有在projectid物业位于对象的项目,你可以这样做:

var n = 0; 
obj[0].bun.forEach(function(item){ if (item.projectid != null) n++}); 

如果你不”吨,它会更复杂。

1

首先,你需要初始化一个变量

var count = 0; 

,你需要运行一个循环,检查并增加相同的帖子:

for (var i = 0; i < data[0].bun.length; i++) { /* 'data' is the object which stores the data */ 
    if (data[0].bun[i].projectid) { 
     count += 1; 
    } 
}  

找到演示here

0
You can use a recursive function to find the occurrence of a key in the json 
    function walk(obj,keyname) {  
     var propertyCount=0;                      
      for (var key in obj) { 
       if (obj.hasOwnProperty(key)) { 
        var val = obj[key];                   
        if(typeof(val) == 'object') {                             
         propertyCount += walk(val,keyname);            
        }else { 
         if(key == keyname){              
          propertyCount +=1;     
         } 
        } 
       } 
      } 
      return propertyCount;        
    } 
    alert(walk(obj,'projectid'));//obj is your json array 
    It will return 2