为什么不能在for-of循环中将更新后的值分配给变量'word'?

时间:2019-03-31 20:12:15

标签: javascript arrays string

为什么不能使用此for-of循环更新数组'words'?

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 个答案:

答案 0 :(得分:1)

您可以分配给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()与捕获组一起用于单词中的第一个字母(头)和其余字母(尾)。然后更改大小写,然后再次将它们与字符串文字结合起来:

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

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

答案 1 :(得分:0)

以下代码段可以更新您的“单词”数组。希望那是您想要的。

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'));