Реализую функцию, которая принимает строку и возвращает позицию каждого символа в этой строке.
Функция:
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&'));
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Делал урок по Ajax поиску, когда вбиваю слово,оно должно проверяться через array в php файле и показывать есть ли оно или нет в array, но в результате...
Есть запрос погоды на сайт openweathermapВ JSON ответе есть в поле weather
Здравствуйте! Возникла задача - нарисовать и скачать svg, вот такой структуры