Jak mogę utworzyć dwukierunkowe mapowanie w JavaScript lub w inny sposób, aby zamienić wartości?

Obecnie muszę tymczasowo zamienić wartości w łańcuchu JavaScript, dlatego będę potrzebował dwukierunkowej mapy / skrótu.

Powiedzmy na przykład, że chcę się zmienić\* do__asterisk__ (to tylko przykład, to nie jest to, co próbuję zrobić). Muszę być w stanie mapować* do__asterisk__ (aby zamienić wartość w oryginalnym łańcuchu), ale wtedy będę musiał być w stanie mapować__asterisk__ wrócić do* (aby odzyskać oryginalny łańcuch).

Oto krótki pseudo-kod tego rodzaju rzeczy, których szukam, więc możesz lepiej to zrozumieć:

var myString = 'this is \* a test';

// ???
var twoWayMap = new TwoWayMap('*' <---> '__asterisk__', '%' <---> '__percent__', ...);

var newString = myString.replace(/\\(.)/g, function(m, c) {
    return twoWayMap.getKey(c);
});
// newString is now 'this is __asterisk__ a test'

// ... later in the code ...

var oldString = newString.replace(/__([^_]+)__/g, function(m, c) {
    return twoWayMap.getValue(c);
});
// oldString is now 'this is * a test'

Właśnie o tym myślałem i do tej pory próbowałem:

var twoWayMap = {'*': '__asterisk__', '%': '__percent__', ...};

// getKey would be like this:
twoWayMap[c];
// getValue would be like:
var val; for (var x in twoWayMap) { if (twoWayMap[x] === c) { val = x; break } }

Oczywistym problemem jest to, że sposób na uzyskanie wartości jest zbyt skomplikowany i nie chcę pisać całej rzeczy za każdym razem, gdy muszę odwrócić wyszukiwanie.

Chciałem tylko wiedzieć: czy jest jakiś sposób na rozwiązanie tego problemu bez uciekania się do zapętlania obiektu? Jeśli nie, czy jest jakiś sposób na ułatwienie czy czyszczenie?

questionAnswers(5)

yourAnswerToTheQuestion