2014-10-20 15 views
5

Ich habe zu ersetzen, um ein JavaScript-Objekt erstellt wieWie die JavaScript-Objekt-Eigenschaft Name dynamisch

var obj={} 
var prop = {} 
prop.name= "name", 
prop.value = "10" 
obj[old_name] = prop; 

ich die old_name-new_name ändern müssen. Ich habe versucht,

obj[new_name] = obj[old_name]; 
delete obj[old_name]; 

Und es funktioniert, aber, wird das Objekt Reihenfolge geändert.

Zum Beispiel:

{"obj1":{"name:name","value:10"},"obj2":{"name:name","value:10"}} 

Wenn ich ersetzen obj1 mit objone, wie folgt aus:

obj[objone ] = obj[obj1]; 
delete obj[obj1 ]; 

Das Objekt, um sich geändert:

{"obj2":{"name:name","value:10"},"objone":{"name:name","value:10"}}] 

Aber ich brauche das ändern Eigenschaftsname allein und nicht die Reihenfolge, und ich versuche auch String ersetzen, aber ich denke, dass es nicht der richtige Weg ist, also schlage mir bitte ein paar Ideen vor.

+5

Objekte haben keine Reihenfolge. – elclanrs

+0

Warum ist die Bestellung ein Problem? – Johan

+0

http://StackOverflow.com/Questions/4647817/Javascript-Object-Rename-Key – Dave

Antwort

5

Objekte haben keine Reihenfolge. Jede offensichtliche Reihenfolge, die Sie sehen, ist ein nicht spezifiziertes Verhalten und Sie können sich nicht darauf verlassen. Sie taten es nicht, wenn die Frage gestellt wurde, aber they do now:

  1. Lassen Schlüssel eine neue, leere Liste sein.
  2. Für jeden eigenen Eigenschaftsschlüssel P von O, die ein ganzzahliger Index ist, numerischen Index um
    • hinzufügen P als letztes Element der Tasten in aufsteigend.
  3. Für jeden eigenen Eigenschaftsschlüssel P von O dass ein String ist, ist aber nicht ein ganzzahliger Index, in Immobilien Erstellung um
    • P als das letzte Element der keys In .
  4. Für jeden eigenen Eigenschaftsschlüssel P von O die
    • hinzufügen Symbol, in Immobilien Schöpfungsordnung ist P als letztes Element der Tasten.
  5. Zurück Schlüssel.

Ihr Weg, um die Eigenschaft der Umbenennung ist der einzige Weg, es zu tun: einen neuen anlegen, dann die alten entfernt. Dies ändert sich an der Stelle, an der es in der Reihenfolge des Objekts angezeigt wird, da es nach der vorherigen Eigenschaft erstellt wurde.

Wenn Sie eine Bestellung benötigen, verwenden Sie ein Array. Während theoretisch Arrays haben auch keine Reihenfolge (weil they're not really arrays), haben wir die Konvention, dass sie Reihenfolge haben, basierend auf dann numerischen Wert der Indizes der Einträge: Der Eintrag bei Index 0 ist vor dem Eintrag bei Index 1 und bald. (Und moderne JavaScript-Engines können und verwenden, wo es möglich ist, echte Arrays.)

+0

Das ist nicht der einzige Weg. Sie _could_ verwenden können: 'JSON.parse (JSON.stringify (myObj) .replace (alt, neu))'. (Ernsthaft, verwenden Sie das nicht) – Cerbrus

+0

@Cerbrus: :-) Die einzige Möglichkeit, die das Objekt vielleicht nicht vollständig ersetzt, vielleicht. –

+0

@Cerbrus Nein, Sie * konnte nicht. * Rohtext Ersatz ist nicht äquivalent mit dem obigen Code, weil es jedes Vorkommen von "alt" durch "neu" ersetzen würde. Nicht nur in einem Eigenschaftsnamen. Nicht nur in Schlüsseln. –

Verwandte Themen