Неправильно работает функция

239
28 июля 2017, 03:42

var transliterate = ( 
  function() { 
    var rus = "щ   ш  ч  ц  ю  я  ё  ж  ъ  ы  э  а б в г д е з и й к л м н о п р с т у ф х ь".split(/ +/g), 
      eng = "shh sh ch cz yu ya yo zh `` y' e` a b v g d e z i j k l m n o p r s t u f x `".split(/ +/g); 
    var rus_char = "й ц у к е н г ш щ з х ъ ф ы в а п р о л д ж э я ч с м и т ь б ю".split(/ +/g), 
      eng_char = "q w e r t y u i o p [ ] a s d f g h j k l ; ' z x c v b n m , .".split(/ +/g); 
    return function(text, engToRus, bool, trans = true) { 
      var x; 
      for (x = 0; x < rus.length; x++) { 
        text = text.split(engToRus ? eng[x] : rus[x]).join(engToRus ? rus[x] : eng[x]); 
        text = text.split(engToRus ? eng[x].toUpperCase() : rus[x].toUpperCase()).join(engToRus ? rus[x].toUpperCase() : eng[x].toUpperCase()); 
        if (bool) text = text.split(trans ? eng_char[x] : rus_char[x]).join(trans ? rus_char[x] : eng_char[x]); 
      } 
      return text; 
    } 
  } 
)(); 
console.log(transliterate("ьщдщвсщм", true, true, false)); 
console.log(transliterate("кщпщ", true, true, false));

Данный код неправильно переводит ьщдщвсщм, результат должен быть molodcov, а на деле получается mололcоv. Кто подскажет, где я допустил ошибку?

Answer 1

Решил проблему тем, что доработал условие:

if (bool) {
      text = text.split(trans ? eng_char[x] : rus_char[x]).join(trans ? rus_char[x] : eng_char[x]);
} else {
      text = text.split(engToRus ? eng[x] : rus[x]).join(engToRus ? rus[x] : eng[x]);
      text = text.split(engToRus ? eng[x].toUpperCase() : rus[x].toUpperCase()).join(engToRus ? rus[x].toUpperCase() : eng[x].toUpperCase());
}

var transliterate = ( 
  function() { 
    var rus = "щ   ш  ч  ц  ю  я  ё  ж  ъ  ы  э  а б в г д е з и й к л м н о п р с т у ф х ь".split(/ +/g), 
      eng = "shh sh ch cz yu ya yo zh `` y' e` a b v g d e z i j k l m n o p r s t u f x `".split(/ +/g); 
    var rus_char = "й ц у к е н г ш щ з х ъ ф ы в а п р о л д ж э я ч с м и т ь б ю".split(/ +/g), 
      eng_char = "q w e r t y u i o p [ ] a s d f g h j k l ; ' z x c v b n m , .".split(/ +/g); 
    return function(text, engToRus, bool, trans = true) { 
      var x; 
      for (x = 0; x < rus.length; x++) { 
        if (bool) { 
          text = text.split(trans ? eng_char[x] : rus_char[x]).join(trans ? rus_char[x] : eng_char[x]); 
        } else { 
          text = text.split(engToRus ? eng[x] : rus[x]).join(engToRus ? rus[x] : eng[x]); 
          text = text.split(engToRus ? eng[x].toUpperCase() : rus[x].toUpperCase()).join(engToRus ? rus[x].toUpperCase() : eng[x].toUpperCase()); 
        } 
      } 
      return text; 
    } 
  } 
)(); 
console.log(transliterate("ьщдщвсщм", true, true, false)); 
console.log(transliterate("кщпщ", true, true, false));

Теперь работает как надо.

READ ALSO
Как отрендерить select при ajax-запросе?

Как отрендерить select при ajax-запросе?

Суть такая: я выбираю первый select и в зависимости от значениея value (из первого селекта), у меня строится второй selectт

214
Узнать имеет ли объект/переменная/поле значение

Узнать имеет ли объект/переменная/поле значение

Возможно ли в js узнать существование значения отличного от null? В голову приходит простое решение:

210
Wordpress infinite scroll (без jQuery и плагинов)

Wordpress infinite scroll (без jQuery и плагинов)

Делаю бесконечный скрол, но не нашел ничего на pure jsПроблема возникает при отправке запроса к admin-ajax

229
Как проверить с помощью moment.js возраст?

Как проверить с помощью moment.js возраст?

Как проверить с помощью momentjs возраст

196