Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.08.2017, 22:28
Новичок на форуме
Отправить личное сообщение для Добрый_Серый_Волк Посмотреть профиль Найти все сообщения от Добрый_Серый_Волк
 
Регистрация: 20.08.2017
Сообщений: 3

Представление массива при использовании forEach
Перебираем массив символов методом .map() в поисках его соответствия символу в алфавите. Внутри callback функции перебираем алфавит методом .forEach(), сравниваем символ из "мап" с символами алфавита. Соответствие нашли, ура! Теперь требуется сдвинуть соответствующую позицию на число N, взять соответствующий ей символ и ремапить массив.
Я говорю про шифр Цезаря если что.
Отчего, хочется понять, в нижеприведенном коде "item из .map()" можно присвоить значение "item из алфавита" только если порядковый номер "item из алфавита" больше или равен значению сдвига(N). А если надо продолжить сдвиг с конца массива, то присваивается черт те что!
Собственно вот:
function Caesar(arr){
        var analisedArr=[];
        var alphabet="ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");
        var len=alphabet.length;
        var returnedStr=[];
        var shift=+arr.shift().substring(2);
        for (var i=0; i<arr.length; i++){
           analisedArr=arr[i].split(" ");//разбиваем строку на слова
            for (var j=0;j<analisedArr.length;j++){
           returnedStr.push((analisedArr[j].split("").map(function(ch){//ищем "правильный" символ
               alphabet.forEach(function(item,n,alphabet){//перебирая алфавит
                   if (ch==item){ch=(n>=shift ? alphabet[n-shift]:alphabet[len-shift+n]);}
               })
           return ch;
           })).join(""));
              
            }
        }
    return returnedStr.join(" ");     
    }


какое влияние здесь имеет "ch", что не дает доступа к последним элементам алфавита?
п.с. Проблему решил введением в callback-функцию из "мап" отдельной переменной:
returnedStr.push((analisedArr[j].split("").map(function(ch){
              var cch="";
               alphabet.forEach(function(item,n,alphabet){
                   if (ch==item){cch=(n>=shift ? alphabet[n-shift]:alphabet[len-shift+n]);}
               })
           return cch;
           })).join(""));

И все же? Что я делал не так?
Ответить с цитированием
  #2 (permalink)  
Старый 20.08.2017, 22:35
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Добрый_Серый_Волк,
https://javascript.ru/forum/misc/266...tml#post163925
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
для чего такая нестыковка в javascript при использовании математических операторов? vitek-82 Общие вопросы Javascript 3 18.03.2017 17:07
forEach для ассоциативного массива raja Общие вопросы Javascript 2 12.10.2016 17:08
Не срабатывает hover при использовании в div IE 6.0 AlexMak (X)HTML/CSS 5 14.05.2009 18:26
Возникает глюк при использовании двух плагинов dummer jQuery 5 23.12.2008 20:26
Проблема в document.write при использовании setInterval() GOll Общие вопросы Javascript 21 06.10.2008 17:38