2011-12-13 19 views
11

Ho qualche JSON-codice che ha più oggetti in esso:Come eseguire il looping attraverso l'array JSON?

[ 
    { 
     "MNGR_NAME": "Mark", 
     "MGR_ID": "M44", 
     "EMP_ID": "1849" 
    }, 
    { 
     "MNGR_NAME": "Steve", 
     "PROJ_ID": "88421", 
     "PROJ_NAME": "ABC", 
     "PROJ_ALLOC_NO": "49" 
    } 
] 

mio ciclo JSON frammento è:

function ServiceSucceeded(result) 
{  
    for(var x=0; x<result.length; x++) 
    {  

    }  
} 

La prego di farmi sapere come controllare non v'è alcuna occorrenza di " MNGR_NAME "nell'array. (Appare due volte nel mio caso.)

+1

significa 'no' 'numero' nella tua domanda media? –

risposta

28

È necessario accedere all'oggetto result su iterazione.

for (var key in result) 
{ 
    if (result.hasOwnProperty(key)) 
    { 
     // here you have access to 
     var MNGR_NAME = result[key].MNGR_NAME; 
     var MGR_ID = result[key].MGR_ID; 
    } 
} 
+0

La tua risposta ha aiutato il mio array JSON a liberarsi dai cattivi dati. Ma perché vengono inviati i dati? Come mai devi controllare quello extra se? – Xogle

+0

Grazie per aver utilizzato il diritto JavaScript. – johnny

0

Questa si trova il numero di occorrenze della chiave MNGR_NAME nel ObjectArray:

var numMngrName = 0; 

$.each(json, function() { 
    // 'this' is the Object you are iterating over 
    if (this.MNGR_NAME !== undefined) { 
     numMngrName++; 
    } 
}); 
5

Si potrebbe utilizzare di jQuery $.each:

var exists = false; 

    $.each(arr, function(index, obj){ 
     if(typeof(obj.MNGR_NAME) !== 'undefined'){ 
      exists = true; 
      return false; 
     } 
    }); 

    alert('Does a manager exists? ' + exists); 

Tornando false rompere la ciascuno, così quando si incontra un manager, l'iterazione si fermerà.

+0

Se vuoi contare, non devi restituire 'false', ovviamente. –

0

All'interno del loop result[x] è l'oggetto, quindi se si desidera contare un membro che può o non può essere presente;

function ServiceSucceeded(result) 
{ 
    var managers = 0 
    for(var x=0; x<result.length; x++) 
    { 
     if (typeof result[x].MNGR_NAME !== "undefined") 
      managers++; 
    } 
    alert(managers); 
} 
0

È possibile utilizzare $ .each o $ .grep, se si desidera anche ottenere gli elementi che contengono l'attributo.

filtered = $.grep(result, function(value) { 
    return (value["MNGR_NAME"] !== undefined) 
}); 
count = filtered.length 
0

È possibile iterare la raccolta e controllare ogni oggetto se contiene la proprietà:

var count = 0; 
var i; 
for(i = 0; i < jsonObj.length; i += 1) { 
    if(jsonObj[i]["MNGR_NAME"]) { 
     count++; 
    } 
} 

esempio di lavoro: http://jsfiddle.net/j3fbQ/

2

Nota che l'oggetto è un array di oggetti JavaScript. Potresti usare qualcosa di simile?

var array = [{ 
    "MNGR_NAME": "Mark", 
    "MGR_ID": "M44", 
    "EMP_ID": "1849" 
}, 
{ 
    "MNGR_NAME": "Steve", 
    "PROJ_ID": "88421", 
    "PROJ_NAME": "ABC", 
    "PROJ_ALLOC_NO": "49" 
}]; 

var numberOfMngrName = 0; 
for(var i=0;i<array.length;i++){ 
    if(array[i].MNGR_NAME != null){ 
     numberOfMngrName++; 
    } 
} 

console.log(numberOfMngrName); 
Problemi correlati