В одном скрипте работает, в другом нет (код)



  • Всем добрый день, подскажите пожалуйста, в чем может быть дело, чего только уже не попробовал. Есть код:

    function cyrill_to_latin(text){
    var arrru = new Array ('Я','я','Ю','ю','Ч','ч','Ш','ш','Щ','щ','Ж','ж','А','а','Б','б','В','в','Г','г','Д','д','Е','е','Ё','ё','З','з','И','и','Й','й','К','к','Л','л','М','м','Н','н', 'О','о','П','п','Р','р','С','с','Т','т','У','у','Ф','ф','Х','х','Ц','ц','Ы','ы','Ь','ь','Ъ','ъ','Э','э');
    var arren = new Array ('Ya','ya','Yu','yu','Ch','ch','Sh','sh','Sh','sh','Zh','zh','A','a','B','b','V','v','G','g','D','d','E','e','E','e','Z','z','I','i','J','j','K','k','L','l','M','m','N','n', 'O','o','P','p','R','r','S','s','T','t','U','u','F','f','H','h','C','c','Y','y','','','\'','\'','E', 'e');
      for(var i=0; i<arrru.length; i++){
        var reg = new RegExp(arrru[i], "g");
        text = text.replace(reg, arren[i]);
        }
      return text;
    }
    
    [[LATIN_TEXT]] = cyrill_to_latin([[RUS_TEXT]]);
    

    В одном скрипте все замечательно, в другом -

    TypeError: Result of expression 'text.replace' [undefined] is not a function. во время выполнения действия 449684013
    

    Уже голову сломал, что может быть не так. Всем заранее большое спасибо.



  • @lcatlas said in В одном скрипте работает, в другом нет (код):

    Всем добрый день, подскажите пожалуйста, в чем может быть дело, чего только уже не попробовал. Есть код:

    function cyrill_to_latin(text){
    var arrru = new Array ('Я','я','Ю','ю','Ч','ч','Ш','ш','Щ','щ','Ж','ж','А','а','Б','б','В','в','Г','г','Д','д','Е','е','Ё','ё','З','з','И','и','Й','й','К','к','Л','л','М','м','Н','н', 'О','о','П','п','Р','р','С','с','Т','т','У','у','Ф','ф','Х','х','Ц','ц','Ы','ы','Ь','ь','Ъ','ъ','Э','э');
    var arren = new Array ('Ya','ya','Yu','yu','Ch','ch','Sh','sh','Sh','sh','Zh','zh','A','a','B','b','V','v','G','g','D','d','E','e','E','e','Z','z','I','i','J','j','K','k','L','l','M','m','N','n', 'O','o','P','p','R','r','S','s','T','t','U','u','F','f','H','h','C','c','Y','y','','','\'','\'','E', 'e');
      for(var i=0; i<arrru.length; i++){
        var reg = new RegExp(arrru[i], "g");
        text = text.replace(reg, arren[i]);
        }
      return text;
    }
    
    [[LATIN_TEXT]] = cyrill_to_latin([[RUS_TEXT]]);
    

    В одном скрипте все замечательно, в другом -

    TypeError: Result of expression 'text.replace' [undefined] is not a function. во время выполнения действия 449684013
    

    Уже голову сломал, что может быть не так. Всем заранее большое спасибо.

    метод replace применяется только к строкам, а вы ему передаёте или массив или число



  • Блин и правда, это случайный элемент списка, можно ли с этим что-то сделать? (

    Уже тупки под утро, как обычно, после 15-16 часов писанины ))



  • @lcatlas said in В одном скрипте работает, в другом нет (код):

    Блин и правда, это случайный элемент списка, можно ли с этим что-то сделать? (

    Уже тупки под утро, как обычно, после 15-16 часов писанины ))

    Ну принудительно переведите в строку .toString()

    text = text.toString().replace(reg, arren[i]);
    


  • Немножечко подкинул ) Спасибо большое!



  • Вот рабочий пример по транслиту русских букв в латиницу, для использования в url или просто если нужно текст конвектировать.

    [[TITLE]] = [[TITLE]][0].toLowerCase();
    [[TITLE]] = [[TITLE]].toString().replace( /([а-яё])|([\s_-])|([^a-z\d])/gi,
            function( all, ch, space, words, i ) {
                if ( space || words ) {
                    return space ? '-' : '-';
                }
                var code = ch.charCodeAt(0),
                    next = [[TITLE]].toString().charAt( i + 1 ),
                    index = code == 1025 || code == 1105 ? 0 :
                        code > 1071 ? code - 1071 : code - 1039,
                    t = ['yo','a','b','v','g','d','e','zh',
                        'z','i','y','k','l','m','n','o','p',
                        'r','s','t','u','f','h','c','ch','sh',
                        'shch','','y','','e','yu','ya'
                    ],
                    next = next && next.toUpperCase() === next ? 1 : 0;
                return ch.toUpperCase() === ch ? next ? t[ index ].toUpperCase() :
                    t[ index ].substr(0,1).toUpperCase() +
                        t[ index ].substring(1) : t[ index ];
            }
      );
    
    


  • @hamov, @Fox said in Ресурс список. Подстановка переменных.:

    В BAS есть своя функция translit(), работает прекрасно, только пробелы в строке она заменяет точками.

    [20:13:30] Поток №1 : Животные,Транспорт
    [20:13:32] Поток №1 : zhivotnye.transport
    

    выполнить код

    [[TRANSLATED_TEXT]] = translit([[TEXT]]).replace(/\./g, ' ')
    


  • @hamov мягко говоря ужасный код, но за нестандартное мышление 5 ))


Log in to reply