2010-05-18 11 views
9

je le tableau JSON suivant des objets dans mon codecomment modifier un tableau JSON avec 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 } 
]; 

Je peux accéder ou itérer cela sans problm en utilisant jQuery. Toutefois, une situation s'est présentée où j'ai besoin de changer la valeur de l'un des éléments (par exemple, changez la propriété ishidden en true pour gid: 28) puis exécutez une autre fonction jQuery par rapport à cette propriété. Est-ce possible? ou dois-je reconstruire l'objet entier? Si possible, comment puis-je y parvenir?

toute aide serait appréciée!

Répondre

3

je dirais que la réponse Justin est mieux, mais je voudrais ajouter cette modification subtile

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

J'ai effectivement testé toutes les réponses et ils ont tous travaillé .. J'ai choisi celui-ci car c'est la première réponse à ma question. sinon toutes les réponses fonctionnent parfaitement. –

8

Essayez ceci:

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

de style jQuery serait:

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

Mais sinon, vous pouvez créer un index:

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

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

Cela permettrait d'économiser un peu de temps à long terme, .

+0

+1. Comment pouvez-vous ne pas aimer jQuery avec une syntaxe aussi simple que cela? :) – Alec

+1

Je rencontre des articles/conseils suggérant de ne pas utiliser $ .each là où c'est possible (principalement pour de grandes informations) car il est plus lent que le javascript natif. mais votre deuxième alternative est assez intéressante d'une manière que je n'ai pas rencontré d'exemple semblable à celui-ci. Je voudrais en savoir plus à ce sujet. Pouvez-vous donner des informations à ce sujet? ou fournir des ressources peuvent être? merci beaucoup pour la réponse aussi! –

+1

@Emin: Concernant: '$ .each()' est plus lent que l'alternative (c'est-à-dire une boucle native): Oui, c'est vrai. Sera-t-il si lent que cela compte en comparaison? Probablement pas, mais vous devez vous comparer à vous-même. Les moteurs JS modernes sont incroyablement rapides, et à moins que vous ayez plusieurs milliers d'enregistrements à faire défiler, vous remarquerez à peine toute différence. En ce qui concerne la solution alternative: Heureux d'expliquer. Qu'est-ce que tu ne comprends pas exactement? – Tomalak

Questions connexes