更改数组中的字符串字符 - Javascript

时间:2016-11-27 21:22:07

标签: javascript arrays string

我正在解决CoderByte的一些问题。此函数的目标是获取一个字符串并将每个单词的首字母大写。例如,'Hello World''hello world'。我无法弄清楚为什么这段代码会给我'Hello World'而不是array[i][0] = array[i][0].toUpperCase();。我知道这一行function LetterCapitalize(str) { var array = str.split(' '); for (var i = 0; i < array.length; i++) { array[i][0] = array[i][0].toUpperCase(); } return array.join(''); } LetterCapitalize('hello world'); 是问题,但不明白为什么它不起作用。我想出了一个替代解决方案,但我想知道为什么这不起作用。非常感谢你的帮助!

{{1}}

6 个答案:

答案 0 :(得分:2)

问题是array[i]引用了一个字符串。但是,strings are immutable in JavaScript,因此此操作失败:array[i][0] = array[i][0].toUpperCase()。您不能在字符串上设置单个索引。

要完成您想要的操作,您必须创建一个首字母大写的 new 字符串。这是一种方法,借用另一种SO post

function capitalizeFirstLetter(str) {
    return str.charAt(0).toUpperCase() + str.slice(1);
}

function capitalizeAllWords(str) { 
    var words = str.split(' ');
    return words.map(capitalizeFirstLetter).join(' ');
} 

capitalizeAllWords('hello world');

答案 1 :(得分:1)

在这种情况下,你可以使用正则表达式

function LetterCapitalize(str) { 
  var regex = /(\b[a-z](?!\s))/g;
  str = str.replace(regex, function(x) {
      return x.toUpperCase();
  });

  console.log(str);
} 

LetterCapitalize('hello world');

答案 2 :(得分:1)

处理此问题的有效方法是使用.map()函数

function cap(string){
    return string.split(" ").map(function(word){
        return word.charAt(0).toUpperCase() + word.slice(1)
    }
}

并逐步指导代码:

.split(“”)通过在每次有空格时添加新项目来生成数组

.map()接受一个值,将其插入一个函数,并根据函数返回的内容修改结果。

.charAt(0)得到第一个字母和 .toUpperCase()将其大写

.slice(1)获取第一个字母后的每个字母。

干杯, TheGenieOfTruth

(在手机上完成,因此格式不稳定且代码未经测试)

答案 3 :(得分:0)

您没有创建二维数组。不能使用[0]引用 - 必须使用子串。

注意substr(第二个参数是一个长度 - 我们只想要1个字符)和substring(其中第二个参数是结束位置 - 这里省略,因此转到字符串结尾)之间的区别。

function LetterCapitalize(str) { 
    var array = str.split(' ');
    for (var i = 0; i < array.length; i++) {
        var firstChar = array[i].substr(0,1).toUpperCase();
        if array[i].length == 1
            array[i]=firstChar;
        else
            array[i]=firstChar + array[i].substring(1);
     }
    return array.join(' ');
} 

LetterCapitalize('hello world');

答案 4 :(得分:0)

采用功能性方法:

var capitalize = function(str) {
  return str.split(/\s+/)
   .map(function(word) { 
      return word.charAt(0).toUpperCase() + word.slice(1);
    })
  .join(' ');
};

作为奖励,此功能还将\n(换行符)和\t(制表符)字符作为大写字母边界。

答案 5 :(得分:-1)

试试这个:

function LetterCapitalize(str) { 
        var array = str.split(' ');
        for (var i = 0; i < array.length; i++) {

            array[i] = array[i][0].toUpperCase()+array[i].slice(1);

        }
    return array.join(' ');
    } 

LetterCapitalize('hello world');