Показать сообщение отдельно
  #1 (permalink)  
Старый 03.01.2020, 08:11
Новичок на форуме
Отправить личное сообщение для Oberin98 Посмотреть профиль Найти все сообщения от Oberin98
 
Регистрация: 03.01.2020
Сообщений: 1

Проверка на toUpperCase()
Работаю на создание транслита, изначально реализовал функцию что все символы приводит в нижний регист и потом происходит транслит и все было хорошо.
Сейчас пытаюсь реализовать что бы зашлавные буквы оставались заглавными не внося дополнительные ключи в объект alphabet, но на проверке toUpperCase всегда выдает ошибку элемент не найден, не могу понять почему, помогите пожалуйста

Описание:

Объект alphabet - это алфаит русский - транслит на англ

Массив alphabetKeys - массив ключей alphabet т.е. русски алфавит, необходим для проверки в функции

В функции изначально полученную строку разбиваю на элементы, первое услови пропускает все пробелы что бы второе условие (проверка на toUpperCase и транслит в верхнем регистре) не задевало пробелы и не давало ошибку, третье условие транслитирует сиволы нижнего регистра

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', щ : 'sh', ъ : '', ы : 'i', ь : '\'', э : 'e', ю : 'y', 
  я : 'ia'
};


const alphabetKeys = Object.keys(alphabet);


let a = 'Привет красавчик';


function trans(x){
  let arr = x.split('');
  console.log(arr)
  for(let i = 0; i < arr.length-1; i+=1){
    if(arr[i] == ' '){
      i++;
    } else if(alphabetKeys.filter(n => n.toUpperCase() == arr[i])){
      arr[i] = alphabet[arr[i]].toUpperCase();
    } else if(alphabetKeys.filter(n => n == arr[i])){
      arr[i] = alphabet[arr[i]];
    }
  }
  return arr.join('')
};
Ответить с цитированием