Javascript обратный алфавит

so I've been messing around with the .replace() function lately and wanted to make it reverse whatever the user inputs. (Aka a -> z, A -> Z, b -> y, B -> Y, ...)

Я использую функцию стекирования, поэтому я просто добавил .replace (). Replace() ... для каждой буквы, но, конечно, это не сработает, так как всякий раз, когда он нажимает n, он начинает полностью изменять ход и в итоге неточный перевод. Любая идея, как я могу обойти это, поскольку, насколько я знаю, JS не имеет функции .reverse (), как Python?

Если вам это нужно, вот мой код

//replacing letters
lettertext = ttext.replace("a", "z")
.replace("A", "Z")
.replace("b", "y")
.replace("B", "y")
.replace("c", "x")
.replace("C", "X")
.replace("d", "w")
.replace("D", "W")
.replace("e", "v")
.replace("E", "V")
.replace("f", "u")
.replace("F", "U")
.replace("g", "t")
.replace("G", "T")
.replace("h", "s")
.replace("H", "S")
.replace("i", "r")
.replace("I", "R")
.replace("j", "q")
.replace("J", "Q")
.replace("k", "p")
.replace("K", "P")
.replace("l", "o")
.replace("L", "O")
.replace("m", "n")
.replace("M", "N")
.replace("n", "m")
.replace("N", "M")
.replace("o", "l")
.replace("O", "L")
.replace("p", "k")
.replace("P", "K")
.replace("q", "j")
.replace("Q", "J")
.replace("r", "i")
.replace("R", "I")
.replace("s", "h")
.replace("S", "H")
.replace("t", "g")
.replace("T", "G")
.replace("u", "f")
.replace("U", "F")
.replace("v", "e")
.replace("V", "E")
.replace("w", "d")
.replace("W", "D")
.replace("x", "c")
.replace("X", "C")
.replace("y", "b")
.replace("Y", "B")
.replace("z", "a")
.replace("Z", "A")
.replace("ä", "ß")
.replace("Ä", "ẞ")
.replace("ö", "ü")
.replace("Ö", "Ü")
.replace("ü", "ö")
.replace("Ü", "Ö")
.replace("ß", "ä")
.replace("ẞ", "Ä")
1
Вы можете сделать что-то вроде этого
добавлено автор George, источник
Вы можете использовать 2 строки: одну, которую хотите изменить, и одну с символами, которые хотите изменить. Затем найдите индекс правильного символа и замените в вашей строке правильный символ новым с тем же индексом.
добавлено автор Baptiste Gavalda, источник
"abc" .split (''). reverse() сделать так.
добавлено автор Shailesh Rathod, источник

6 ответы

Создайте объект, в котором ключом будут буквы строки, а его значением будет символ, который вы хотите заменить.

При получении входного значения разбейте строку, создайте массив и используйте map , а внутри его функции обратного вызова проверьте регистр символа.

Если это нижний регистр, то непосредственно извлекают значение, если верхний регистр преобразует его в нижний регистр, чтобы получить значение из объекта словаря, а затем преобразует его обратно в верхний регистр перед возвратом.

Используйте join для создания последней строки

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

let rvObj = {
  a: 'z',
  b: 'y'
}

function reverse() {
  let k = document.getElementById('text').value.trim().split('').map((item) => {
    let getCase = (item === item.toLowerCase()) ? true : false
    if (getCase) {
      return rvObj[item];
    } else {
      return rvObj[item.toLowerCase()].toUpperCase()
    }
  }).join('')
  console.log(k)
}
<input type="text" id='text'>
<button type='button' onclick='reverse()'>Reverse</button>
</div> </div>
1
добавлено

Вы должны поменять каждую букву только один раз. Вы можете использовать этот шаблон:

a='abcxyz'.replace(/./g,function(letter){
switch (letter) {
        case 'a':
            return 'z'
    default:
        return letter
}
})

То, что мы делаем, это заменит от а до я. Но это не заменит его снова. Каждое письмо заменяется только один раз.

Функция, которую я использовал для замены, выполняется для каждой буквы в строке.

0
добавлено
Вы правы, вот почему я разместил еще один ответ без необходимости. В этом ответе я отвечаю на конкретный вопрос о замене дважды одного и того же письма после его замены.
добавлено автор Aminadav, источник
Это не кажется отличным решением, учитывая, что вам придется делать много переключений дел? По одному на каждое письмо, мягко говоря?
добавлено автор JO3-W3B-D3V, источник

После использования всех заменяющих характеристик вы можете использовать код символа, чтобы автоматически найти подходящую пару:

a='abcxyzABC'.replace(/./g,function(letter){
if (letter>='a' && letter<='z') {
    return String.fromCharCode( 'z'.charCodeAt(0) - letter.charCodeAt(0) + 'a'.charCodeAt(0)  )
}
if (letter>='A' && letter<='Z') {
    return String.fromCharCode( 'Z'.charCodeAt(0) - letter.charCodeAt(0) + 'A'.charCodeAt(0)  )
}
})

//ouptut: 'zyxcbaZYX"
0
добавлено

Вы должны использовать регулярное выражение в функции замены.

Пытаться :

ttext.replace(/a/g, "z").replace(/A/g, "Z").replace(/b/g, "y")...
0
добавлено

Вы можете взять хэш-таблицу для пар и отобразить новый символ или оригинальный символ, если он недоступен в хэш-таблице.

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

function replace(string) {
    var code = { "a": "z", "A": "Z", "b": "y", "B": "y", "c": "x", "C": "X", "d": "w", "D": "W", "e": "v", "E": "V", "f": "u", "F": "U", "g": "t", "G": "T", "h": "s", "H": "S", "i": "r", "I": "R", "j": "q", "J": "Q", "k": "p", "K": "P", "l": "o", "L": "O", "m": "n", "M": "N", "n": "m", "N": "M", "o": "l", "O": "L", "p": "k", "P": "K", "q": "j", "Q": "J", "r": "i", "R": "I", "s": "h", "S": "H", "t": "g", "T": "G", "u": "f", "U": "F", "v": "e", "V": "E", "w": "d", "W": "D", "x": "c", "X": "C", "y": "b", "Y": "B", "z": "a", "Z": "A", "ä": "ß", "Ä": "ẞ", "ö": "ü", "Ö": "Ü", "ü": "ö", "Ü": "Ö", "ß": "ä", "ẞ": "Ä" };
    return Array.from(string, c => code[c] || c).join('');
}

console.log(replace('Übermut2019'));//'Öyvinfg2019'
console.log(replace('Öyvinfg2019'));//'Übermut2019'
</div> </div>
0
добавлено

Разъяснения

В рамках этого решения я подумал, что было бы разумно использовать ES6 для преобразования какой-либо строки в массив, а не использовать split , поскольку использование split может вызвать проблемы, связанные с суррогатные пары . Поэтому после преобразования строки в массив ее можно просто перевернуть, а затем использовать функцию join , чтобы преобразовать ее обратно в строку.

Есть и другие вещи, которые вы можете сделать, такие как сортировка массива, чтобы убедиться, что он в порядке или что-то в этом роде, но вы поняли, я подумал, что вы можете оценить обе реализации, так что вот и все! :)

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

// Non sorted alphabet
const alphabet = "acbedfghijklmnopqrstuvwxyz";

// Simple reverse
const reverseAlphabet = alphabet => [...alphabet].reverse().join("");

// Simple reverse & sort 
const reverseSortAlphabet = alphabet => [...alphabet].sort().reverse().join("");

// Just the variable alphabet in reverse 
console.log(reverseAlphabet(alphabet)); 

// A sorted copy of the variable alphabet in reverse 
// Aka z, ..., a
console.log(reverseSortAlphabet(alphabet)); 
</div> </div>
0
добавлено
JavaScript Jobs — чат
JavaScript Jobs — чат
8 336 участник(ов)

JavaScript Jobs — чат для поиска работы и людей Правила оформления: https://teletype.in/@telegram-ru/r1WQe5F1m См. также: @mobile_jobs, @devops_jobs, @nodejs_jobs, @react_js, @angular_ru, @js_ru

JavaScript.ru
JavaScript.ru
7 932 участник(ов)

Сообщество сайта JavaScript.ru в Slack.

pro.js
pro.js
4 675 участник(ов)

Про JavaScript и NodeJS Invite: https://t.me/joinchat/Be4rsT5Rsgq30DHutjxXgA Правила: http://telegra.ph/ru-chat-rules-06-19 Вакансии только с ЗП, не чаще раза в неделю.

Верстка сайтов HTML/CSS/JS/PHP
Верстка сайтов HTML/CSS/JS/PHP
3 439 участник(ов)

Правила группы: напишите !rules в чате. Группа Вк: vk.com/web_structure Freelancer: @web_fl Веб Дизайн: @dev_design Маркетолог: @topmarkening Автор: @M_Boroda

JavaScript — русскоговорящее сообщество
JavaScript — русскоговорящее сообщество
3 269 участник(ов)

Рекомендуем сразу отключить уведомления Правила: https://rudevs.network/ByaMH6un7 См. также: @js_noobs_ru, @nodejs_ru, @typescript_ru, @react_js, @electron_ru Вакансии и поиск работы: @javascript_jobs

JavaScript Noobs — сообщество новичков
JavaScript Noobs — сообщество новичков
2 484 участник(ов)

Чат для новичков

CSS — русскоговорящее сообщество
CSS — русскоговорящее сообщество
1 502 участник(ов)

Сообщество любителей CSS Возникли проблемы с CSS? – пиши сюда, обсудим и предложим самое лучшее решение Работа: @css_ru_jobs Правила: https://teletype.in/@css_ru/r1EWtQ2w7 Приходите в наши чаты @javascript_ru и @frontend_ru Флуд: @css_flood

Чат — Типичный Верстальщик
Чат — Типичный Верстальщик
1 080 участник(ов)

Основной канал: @tpverstak Обратная связь: @annblok Все ссылки на соц.сети проекта: http://taplink.cc/tpverstak ПРАВИЛА ЧАТА — https://teletype.in/@annblok/BygPgC3E7

javascript_ru
javascript_ru
915 участник(ов)

Сообщество любителей самого популярного языка программирования в мире. Чат основан в 2009 году. Логи: https://goo.gl/9EOeM7 Поддержка бота: @chat_linker (ссылка на репу внутри) Вам будут интересны @frontend_ru и @css_ru

jsChat
jsChat
603 участник(ов)

Чат посвященный программированию на языке javaScript Перед отправкой ссылки на Ваш контент посоветуйтесь с админом Все ссылки удаляются ботом автоматически

JavaScript for Zombies Chat
JavaScript for Zombies Chat
492 участник(ов)

Чат про JavaScript для настоящих zombie! Вход строго по приглашениям! Ссылка для строгих приглашений: https://t.me/joinchat/AAMBHz3Uyr0tuZ7VaB029g

All That JS
All That JS
417 участник(ов)

JS на русском

Веб-Технологи: UI/UX, Вёрстка, Фронтенд
Веб-Технологи: UI/UX, Вёрстка, Фронтенд
167 участник(ов)

Всё про веб-дизайн и вёрстку. А также: HTML, CSS, флекс и бутстрапы, шаблонизаторы, препроцессоры, методологии, аглифаеры, улучшаторы и обфускаторы. Обсуждаем темы юзабилити, устраиваем А/В тесты лендингов, и проводим аудит.

DTP :: @DTPublish
DTP :: @DTPublish
147 участник(ов)

Обсуждаемые темы: полиграфия, препресс, верстка, дизайн, иллюстрации, скрипты, плагины. Канал - @DTPublishing

css_jobs
css_jobs
26 участник(ов)

Чат для вопросов по css и html: @css_ru Флуд: @css_flood Канал с вакансиями и резюме: @css_jobs_feed

css_флуд
css_флуд
10 участник(ов)