2010-05-18 5 views
9

Ich habe folgendes json Array von Objekten in meinem Codewie ein JSON-Array mit jQuery ändern

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 } 
]; 

Ich kann ohne problm durch diese zugreifen oder iterieren jQuery verwenden. Es entstand jedoch eine Situation, in der ich einen Wert eines der Elemente ändern muss (z. B. die ishidden Eigenschaft zu true für ändern) und dann eine andere jQuery-Funktion dagegen ausführen. Ist das möglich? oder muss ich das ganze Objekt neu aufbauen? Wenn möglich, wie kann ich das erreichen?

jede Hilfe wäre willkommen!

Antwort

3

würde ich das sagen Justin Antwort ist besser, aber ich diese subtile Änderung

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

Ich testete tatsächlich alle Antworten und sie alle arbeiteten .. Ich wählte dieses, da es die erste Antwort auf meine Frage ist. Ansonsten funktionieren alle Antworten perfekt. –

8

Try this:

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

jQuery Stil wäre:

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

aber alternativ können Sie einen Index erstellen:

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

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

dies einige Zeit auf lange Sicht sparen würde .

+0

+1 hinzufügen würde. Wie kann man jQuery mit der so einfachen Syntax _nicht_ mögen? :) – Alec

+1

Ich stoße auf Artikel/Tipps über den ganzen Ort und schlage vor, $ .each wo immer möglich zu verwenden (vor allem für große Informationen), da es langsamer als natives Javascript ist. aber Ihre zweite Alternative ist ziemlich interessant in einer Weise, dass ich über kein ähnliches Beispiel wie dieses gekommen bin. Ich würde gerne mehr darüber erfahren. Kannst du etwas dazu sagen? oder Ressourcen bereitstellen? Vielen Dank auch für die Antwort! –

+1

@Emin: Betreffend: '$ .each()' ist langsamer als die Alternative (d. H .: eine native Schleife): Ja, das stimmt. Wird es so langsam sein, dass es im Vergleich wichtig ist? Wahrscheinlich nicht, aber Sie müssen für sich selbst Benchmarking. Moderne JS-Engines sind blitzschnell, und wenn Sie nicht mehrere tausend Datensätze haben, werden Sie kaum einen Unterschied bemerken. Zur alternativen Lösung: Gerne zu erklären. Was genau verstehst du nicht? – Tomalak