2012-09-28 31 views
6

¿Hay una buena manera de enlazar solo los primeros 3 elementos de un objeto json usando el jquery en cada ciclo?¿Cómo limitar un bucle en json en jquery?

Estoy pensando en un equivalente de la función .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 
});​ 

Respuesta

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; 
});​ 

cada uno se detiene cuando regrese falsa.

A partir de los documentos:

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

Usted puede probar este

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

DEMO.

+2

Bueno, eso repetirá todos los elementos en la matriz. – VisioN

+0

@VisioN No, no lo hará. Vea los detalles en la respuesta de Aquino. – Barmar

+1

@Barmar Se actualizó la respuesta actual. Ver las revisiones – VisioN

7

probar este

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

¿Es esto más rápido que simplemente detener el ciclo después de '3 incrementos de i?' – Ohgodwhy

+0

No debería importar para objetos json pequeños .. ¿Qué pasa si su objeto json tiene una gran cantidad de datos? Si este es el caso, usted está innecesariamente bucle a través de –

+0

Estoy completamente de acuerdo con tu declaración; Solo pregunte por curiosidad en caso de que lo supieras. – 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

También puede tratar de bucle a través de ella usando un bucle for

Así es como se hace

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

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

    } 

Y para recorrer toda la matriz de Json utilice la siguiente

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

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