JavaScript Почему в слове "sobaka" при выполнении меняется буква "a" в середине(должна меняться последняя)

нужно в массиве из слов изменить у каждого слова последнюю букву на заглавную.

let words = 'sobaka marsik pesik'
let arrayWords = words.split(' ')

arrayWords = arrayWords.map(function(elem, index) {
    let newElem = elem[elem.length-1].toUpperCase()
    let res = elem.replace(elem[elem.length-1], newElem)
    return elem = res})
console.log(arrayWords)//['sobAka', 'marsiK', 'pesiK']

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

Автор решения: Алексей Шиманский

replace работает через регулярки. И явно не так, как вы ожидали... и как минимум вернёт первое попадание в строке (внимательно почитайте документацию: https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/String/replace это не та "замена", о которой вы подумали)

Лучше вернуть комбинацию в виде "часть строки без последнего символа" + "изменённый последний символ". Первую часть можно получить из slice, вторую - по длине - 1

let words = 'sobaka marsik pesik';
let arrayWords = words.split(' ');

arrayWords = arrayWords.map(function(elem, index) {    
    return elem.slice(0, -1) + elem[elem.length-1].toUpperCase();
});

console.log(arrayWords)

→ Ссылка