Wie kann ich ein bidirektionales Mapping in JavaScript erstellen oder eine andere Möglichkeit zum Austauschen von Werten?

10

Ich muss momentan Werte in einer JavaScript-Zeichenkette vorübergehend auslagern, und deshalb muss ich eine Zwei-Wege-Map / Hash-Sache haben.

Nehmen wir zum Beispiel an, ich möchte \* in __asterisk__ ändern (dies ist nur ein Beispiel, es ist nicht das, was ich eigentlich versuche). Ich muss * auf __asterisk__ abbilden können (um den Wert in der ursprünglichen Zeichenkette zu ersetzen), aber dann muss ich auch __asterisk__ zurück auf * (to Holen Sie die ursprüngliche Zeichenfolge zurück).

Hier ist ein kurzer Pseudo-Code der Art von Dingen, nach denen ich suche, damit Sie es besser verstehen können:

%Vor%

Das habe ich bisher überlegt und versucht:

%Vor%

Das offensichtliche Problem dabei ist, dass der Weg, um nach Wert zu kommen, viel zu kompliziert ist, und ich möchte nicht das ganze Ding jedes Mal aufschreiben müssen, wenn ich die Suche rückwärts machen muss.

Ich wollte nur wissen: Gibt es eine Möglichkeit, dieses Problem zu lösen, ohne auf ein Objekt zurückzugreifen? Wenn nicht, gibt es einen Weg, es einfacher oder sauberer zu machen?

    
Doorknob 12.01.2014, 03:07
quelle

4 Antworten

5

Verwenden Sie zwei Objekte. Ein Objekt enthält das * -> _asterisk_ Mapping, das andere Objekt enthält _asterisk_ -> * .

%Vor%     
Barmar 12.01.2014, 03:09
quelle
18

Mit einem zusätzlichen internen Objekt für das Reverse-Mapping. Am besten, wenn wir eine Utility-Klasse hinzufügen;) so:

%Vor%

Dann instanziierst du das so:

%Vor%

Dann, um es zu benutzen:

%Vor%

Hoffe, das hilft. Prost

    
Edgar Villegas Alvarado 12.01.2014 03:14
quelle
0

Ich würde einfach ein einfaches Objekt verwenden:

%Vor%

Wenn Sie nicht alle ausschreiben möchten, sehen Sie sich die Implementierung des Unterstrichs _.invert(object) hier

    
sparrow 12.01.2014 03:12
quelle
0

Ich brauchte etwas Ähnliches und habe Ссылка

erstellt

Es implementiert eine 2-Wege-Karte mit 2 es6 Map, obwohl es nicht viel Funktionalität hat, es ist getestet und da es geschrieben wird typescript kommt mit offiziellen Typings.

    
harunurhan 19.01.2018 14:16
quelle

Tags und Links