Почему я не могу присвоить обновленное значение переменной 'word' здесь в цикле for? - PullRequest
0 голосов
/ 31 марта 2019

Почему я не могу обновить массив 'words', используя этот цикл for-of?

function capitalizeLetters(str) {
    let words = str.split(' ');

    for(var word of words)
        word = word.charAt(0).toUpperCase() + word.slice(1);

    return words.join(' ');
}

console.log(capitalizeLetters('i love javascript'));

Ответы [ 2 ]

1 голос
/ 31 марта 2019

Вы можете присвоить word, но поскольку это примитив, а не указатель на место в области, значение заменяется, но оно не обновляет массив.Вы можете использовать Array.map() вместо:

function capitalizeLetters(str) {
  return str.split(' ')
    .map(word => word.charAt(0).toUpperCase() + word.slice(1))
    .join(' ');
}

console.log(capitalizeLetters('i love javascript'));

Другой вариант - использовать String.replace() с группами захвата для 1-й буквы (заголовка) и остальных букв (хвоста) в слове.Затем измените регистр и снова объедините их со строковым литералом:

function capitalizeLetters(str) {
  return str.replace(/(\w)(\w+)/g, 
    (_, head, tail) => `${head.toUpperCase()}${tail.toLowerCase()}`
  );
}

console.log(capitalizeLetters('i love javascript'));
0 голосов
/ 31 марта 2019

Ниже фрагмент может обновить ваш массив слов.Надеюсь, это то, что вы искали.

function capitalizeLetters(str) {
    let words = str.split(' ');
i=0;
    for(var word of words){     
        words[i] = word.charAt(0).toUpperCase() + word.slice(1);
        i++;
     }
    return words.join(' ');
}

console.log(capitalizeLetters('i love javascript'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...