Показать сообщение отдельно
  #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(""));

И все же? Что я делал не так?
Ответить с цитированием