Реализую функцию, которая принимает строку и возвращает позицию каждого символа в этой строке.
Функция:
alphabet_position("The sunset sets at twelve o' clock.")
Должна вернуть:
"20 8 5 19 21 14 19 5 20 19 5 20 19 1 20 20 23 5 12 22 5 15 3 12 15 3 11"
Не получается реализовать, мой алгоритм выдаёт ошибку -1. Какой алгоритм придумать чтобы реализовать, ума не приложу.
function alphabetPosition(allLetters, letter) {
return allLetters.indexOf(letter);
}
var alphabet = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"];
var letter = "The sunset sets at twelve o' clock"
var letterPosition = alphabetPosition(alphabet, letter);
В качестве альтернативного решения, можно использовать регулярное выражение в методе replace.
Выделить в нем две группы - символы для замены на номера, и символы для замены на пустую строку.
В самой функции замены проверить к какому диапазону относится символ, большие или маленькие буквы, и в соответствии с этим вывести нужный номер
function alphabetPosition(text) {
var length = text.length,
ACode = 65,
aCode = 97,
map = {
true: aCode - 1,
false: ACode - 1
};
return text.replace(/([a-z])|([^a-z])/ig, function($0, char) {
if (!char) return '';
var charCode = char.charCodeAt(0);
return (charCode - map[charCode >= aCode]) + ' ';
}).trim();
}
console.log(alphabetPosition("The sunset sets at twelve o' clock."));
Ваш код все равно не выведет нужный результат, так как у вас алфавит только для строчных символов, а в строке есть и прописные (большие).
Чтобы не создавать массив с алфавитом, можно использовать функцию String.prototype.charCodeAt, которая возвращает код символа. Код символа "a" (строчная английская) равен 97:
'a'.charCodeAt(0); // 97
Т.е. можно подсчитать номер любой буквы в английском алфавите используя symbol.charCodeAt(0) - 96 (a - 1, b - 2, c -3 и т.д.)
var sentence = 'The sunset sets at twelve o' clock';
var result = sentence
.toLowerCase() // приводим все символы в строке к нижнему регистру
.replace(/[^a-z-]/g, '') // удаляем все кроме букв a-z
.split('') // преобразует строчку в массив
.map(function(s) {
return s.charCodeAt(0) - 96; // возвращаем номер буквы
}
);
// на выходе получаем необходимый вам массив
console.log(JSON.stringify(result)); // "20 8 5 19 21 14 19 5 20 19 5 20 19 1 20 20 23 5 12 22 5 15 3 12 15 3 11"
возвращает позицию каждого символа в строке:
function alphabetPosition(text) {
return text.toLowerCase().split('')
.filter( c => c >= 'a' & c <= 'z' )
.map( c => c.charCodeAt(0) - 'a'.charCodeAt(0) + 1)
.join(' ');
}
console.log(alphabetPosition('n8_ovuu&'));
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники