2010-05-18 28 views
9

tengo la siguiente matriz de objetos JSON en mi códigocómo modificar una matriz JSON con jQuery

var groups = [ 
{ "gid": 28, "name": "Group 1", "ishidden": false, "isprivate": false }, 
{ "gid": 16, "name": "Group 2", "ishidden": true, "isprivate": false }, 
{ "gid": 31, "name": "Group 3", "ishidden": true, "isprivate": false }, 
{ "gid": 11, "name": "Group 4", "ishidden": false, "isprivate": false }, 
{ "gid": 23, "name": "Group 5", "ishidden": false, "isprivate": false } 
]; 

puedo acceder o se puede recorrer esta sin problm usando jQuery. Sin embargo, surgió una situación en la que necesito cambiar el valor de uno de los elementos (por ejemplo, cambiar la propiedad ishidden al true por gid: 28) y luego ejecutar otra función jQuery. es posible? o tengo que volver a construir todo el objeto? Si es posible, ¿cómo puedo lograr esto?

cualquier ayuda se agradece!

Respuesta

3

, diría que la respuesta de Justin es mejor, sin embargo, me gustaría añadir esta sutil modificación

var lim = groups.length; 
for (var i = 0; i < lim; i++){ 
if (groups[i].gid == 28){ 
    groups[i].ishidden = true; 
    break; 
} 
} 
+0

De hecho, probé todas las respuestas y todas funcionaron. Elegí esta, ya que es la primera respuesta a mi pregunta. de lo contrario, todas las respuestas funcionan a la perfección. –

8

Prueba esto:

for (var i = 0; i < groups.length; i++){ 
if (groups[i].gid == 28){ 
    groups[i].ishidden = true; 
    break; 
} 
} 
12

estilo jQuery sería:

$(groups).each(function() { 
    if (this.gid == 28) this.ishidden = true; 
}); 

Pero también, puede crear un índice:

var index = {}; 
$(groups).each(function() { index[this.gid] = this; }); 

// and then 
index["28"].ishidden = true; 

Esto ahorraría algo de tiempo en el largo plazo .

+0

+1. ¿Cómo puede no gustarle jQuery con una sintaxis tan simple como esta? :) – Alec

+1

Me encuentro con artículos/consejos por todo el lugar sugiriendo no usar $ .each siempre que sea posible (principalmente para información grande) ya que es más lento que Javascript nativo. pero su segunda alternativa es bastante interesante de una manera en la que no he encontrado ningún ejemplo similar a este. Me gustaría aprender más al respecto. ¿Puedes darnos algo de información sobre esto? o proporcionar recursos puede ser? ¡Muchas gracias por la respuesta también! –

+1

@Emin: Con respecto a: '$ .each()' es más lento que la alternativa (es decir, un bucle nativo): Sí, eso es cierto. ¿Será tan lento que importa en comparación? Probablemente no, pero debe establecer un punto de referencia para usted mismo. Los motores JS modernos son increíblemente rápidos y, a menos que tengas varios miles de registros por recorrer, apenas notarás ninguna diferencia. En cuanto a la solución alternativa: feliz de explicar. ¿Qué es exactamente lo que no entiendes? – Tomalak

Cuestiones relacionadas