Массив из имён с заглавной буквы

Я попробовал написать так:

let names = ['KosTya', 'serGey', 'JoRDan', 'aleksandr'];
for (let name of names) {
    name = name.charAt(0).toUpperCase() + name.substr(1);
    console.log(name);
}

Это хоть и делает заглавной первую букву, однако потом буквы того же регистра, какого они были изначально. Мне же нужно, чтоб первая буква была заглавной, а остальные - нет.

Что я делаю не так?


Ответы (2 шт):

Автор решения: Great Tech

Вы забыли перевести все буквы в нижний регистр до того, как перевели первую в верхний.

Иначе говоря, таков алгоритм:

  • есть слово, например: пАШа
  • все буквы переводятся в нижний регистр, получаем паша
  • Затем первая буква переводится в верхний регистр, остальные остаются как есть: Паша

Надо также заметить, что в использовании charAt() уже нет особого смысла, и можно получить букву тем же способом, что в массиве (bracket notation)

let names = ['KosTya', 'serGey', 'JoRDan', 'aleksandr'];

for (let name of names) {
    name = name.toLowerCase();
    name = name[0].toUpperCase() + name.substr(1);
    console.log(name);
}

→ Ссылка
Автор решения: Pavel Nazarian

let names = ['KosTya', 'serGey', 'JoRDan', 'aleksandr'];

let new_names = names.map(n => n[0].toUpperCase() + n.slice(1).toLowerCase())

console.log(new_names)

→ Ссылка