2012-09-28 15 views
6

C'è un buon modo per eseguire il loop solo sui primi 3 elementi di un oggetto json utilizzando il jquery ogni ciclo?Come limitare un loop su dati json in jquery?

Sto pensando a un equivalente della funzione .slice(start,end).

var data = [ 
{"Id": 10004, "PageName": "club"}, 
{"Id": 10040, "PageName": "qaz"}, 
{"Id": 10059, "PageName": "ee"}, 
{"Id": 10089, "PageName": "dd"}, 
{"Id": 10095, "PageName": "hh"} 
]; 

$.each(data, function(i, item) { 
    alert(item.PageName); 
    // somehow break at item 3 
});​ 

risposta

27
var data = [ 
{"Id": 10004, "PageName": "club"}, 
{"Id": 10040, "PageName": "qaz"}, 
{"Id": 10059, "PageName": "ee"}, 
{"Id": 10089, "PageName": "dd"}, 
{"Id": 10095, "PageName": "hh"} 
]; 

$.each(data, function(i, item) { 
    alert(item.PageName); 
    return i<2; 
});​ 

ogni interrompe quando si torna falsa.

Dalla documentazione:

We can break the $.each() loop at a particular iteration by making the callback function return false. Returning non-false is the same as a continue statement in a for loop; it will skip immediately to the next iteration.

2

Si può provare questo

$.each(data, function(i, item) { 
    if(i>2) return false; 
    alert(item.PageName); 
});​ 

DEMO.

+2

Bene, questo itererà tutti gli elementi nella matrice. – VisioN

+0

@VisioN No non lo farà. Vedi i dettagli nella risposta di aquinas. – Barmar

+1

@Barmar La risposta corrente è stata aggiornata. Vedi le revisioni. – VisioN

7

Prova questa

$.each(data.slice(0,3), function(i, item) { 
    alert(item.PageName); 
});​ 
+0

È più veloce del semplice arresto del ciclo dopo "3 incrementi di i?" – Ohgodwhy

+0

Non dovrebbe essere importante per i piccoli oggetti JSON. Cosa succede se il tuo oggetto JSON ha una grande quantità di dati. Se il caso è inutilmente in loop tramite –

+0

Sono completamente d'accordo sulla tua affermazione; Ho solo chiesto per curiosità se sapessi. – Ohgodwhy

-1
$.each(data, function(i){ 
    //i is 0 based, so 3 is really 2. 
    if(i == 2){ 
     //exit the loop on the 3rd iteration of the object. 
     return false; 
    } 
}); 
0
$.each($(data).slice(0,3), function(i,item){ 
    console.log("\t",item.Id); 
}); 
0

È anche provare a scorrere utilizzando un ciclo for

Ecco come si fa

 for(var i =0;i<3;i++){ 

     alert("Id is"+d[i].id) ; 

    } 

E per scorrere l'intero array Json utilizzare quanto segue

 for(var i =0;i<d.length;i++){ 

     alert("Id is"+d[i].id); 
    }