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