Показать сообщение отдельно
  #6 (permalink)  
Старый 04.01.2020, 04:48
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,012

Лучше продублировать карту для заглавных букв, чтобы потом с этим не возиться.


<script>
const alphabet = {
  а : 'a', б : 'b', в : 'v', г : 'g', д : 'd', е : 'e', ё : 'e', ж : 'zh',
  з : 'z', и : 'i', й : 'i', к : 'k', л : 'l', м : 'm', н : 'n', о : 'o',
  п : 'p', р : 'r', с : 's', т : 't', у : 'u', ф : 'f', х: 'h', ц : 'c',
  ч :'ch', ш : 'sh', щ : 'shch', ъ : '', ы : 'i', ь : '\'', э : 'e', ю : 'y',
  я : 'ia'
};
Object.keys(alphabet).forEach((key)=>{
  alphabet[key.toUpperCase()] = alphabet[key].replace(/^./, m=>m.toUpperCase());
});


let a = 'Щегол ЩЕГОЛ';

function trans(str){
 let a = str.split('');
 for(let i=0; i<a.length; ++i) { a[i] = alphabet[a[i]] || a[i]; }
 return a.join('');
};

document.write(trans(a));
  </script>


Для тех букв, у которых транслитерация многобуквенная ("ч" и т.д.), заглавный вариант в примере предполагает написание слов с большой буквы, но не капсом полностью. Если надо нормально поддерживать капсовые слова, то придётся это отдельно проверять как-то.
Ответить с цитированием