2013-07-09 9 views
6

Wie sollte ich die Schlüsselzeichenfolgen in einem Javascript-Schlüssel ersetzen: Wert Hash-Karte? DieseWie ersetzen/Namen Schlüssel in einem Javascript-Schlüssel: Wert-Map?

ist das, was ich bisher:

var hashmap = {"aaa":"foo", "bbb":"bar"}; 
console.log("before:"); 
console.log(hashmap); 

Object.keys(hashmap).forEach(function(key){ 
    key = key + "xxx"; 
    console.log("changing:"); 
    console.log(key); 
}); 

console.log("after:"); 
console.log(hashmap); 

Sehen sie in diesem jsbin läuft.

Die "Vorher" - und "Nachher" -Hashmaps sind die gleichen, so scheint die forEach in einem anderen Bereich zu sein. Wie kann ich es reparieren? Vielleicht gibt es bessere Möglichkeiten, dies zu tun?

+2

So: http://jsbin.com/idobuc/3/edit – Passerby

Antwort

13

Es hat nichts mit Umfang zu tun. key ist nur eine lokale Variable, es ist kein Alias ​​für den eigentlichen Objektschlüssel, daher ändert die Zuweisung das Objekt nicht.

Object.keys(hashmap).forEach(function(key) { 
    var newkey = key + "xxx"; 
    hashmap[newkey] = hashmap[key]; 
    delete hashmap[key]; 
}); 
+0

Beachten Sie, dass dies nur funktioniert, wenn alle neuen Schlüssel unterschiedlich sind aus dem alten Schlüssel, wie in diesem Beispiel, oder sonst würde der Schlüssel vollständig gelöscht werden. –

+0

@HaoQiLi Ganz richtig. Ein sicherer Algorithmus würde das Kopieren des Objekts in ein neues Objekt und dann das Zurückkopieren beinhalten. Fühlen Sie sich frei, diese Antwort zu posten. – Barmar

+0

Passer hat das schon getan: jsbin.com/idobuc/3/edit –

0

Sie ändern einfach die Kopie des Schlüssels des Objekts, so dass das ursprüngliche Objekt wird nicht verändert. Sie können ein neues Objekt erstellen, die neuen Schlüssel zu halten, wie folgt aus:

var hashmap = {"aaa":"foo", "bbb":"bar"}; 
console.log("before:"); 
console.log(hashmap); 

var newHashmap = {}; 
Object.keys(hashmap).forEach(function(key){ 
    var value = hashmap[key]; 

    key = key + "xxx"; 
    console.log("changing:"); 
    console.log(key); 

    newHashmap[key] = value; 
}); 

console.log("after:"); 
console.log(newHashmap); 
Verwandte Themen