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?