Представление массива при использовании 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("")); И все же? Что я делал не так? |
Добрый_Серый_Волк,
https://javascript.ru/forum/misc/266...tml#post163925 |
Часовой пояс GMT +3, время: 00:17. |