使用循环和函数javascript将文本更改为驼峰大小写

使用循环和函数javascript将文本更改为驼峰大小写,javascript,string,for-loop,operators,Javascript,String,For Loop,Operators,我试图用一个函数把文本改成驼峰大小写。文本中的连字符表示字母需要大写的位置。i、 e.“这是驼峰案例”将变成这是驼峰案例。我已经更改了每个单词,希望使用+=将它们作为串联字符串返回。但是,当我尝试返回字符串时,+=无法识别,或者我收到一条错误消息,说明“fullWord未定义”。这很奇怪,因为当我在循环中向它发出警报时,会识别出var fullWord 错误从哪里来。我怎样才能纠正它 塔克斯 函数camelize(str){ var-wordArr=str.split('-'); 对于(变量i=

我试图用一个函数把文本改成驼峰大小写。文本中的连字符表示字母需要大写的位置。i、 e.
“这是驼峰案例”
将变成
这是驼峰案例
。我已经更改了每个单词,希望使用
+=
将它们作为串联字符串返回。但是,当我尝试返回字符串时,
+=
无法识别,或者我收到一条错误消息,说明“fullWord未定义”。这很奇怪,因为当我在循环中向它发出警报时,会识别出
var fullWord

错误从哪里来。我怎样才能纠正它

塔克斯

函数camelize(str){
var-wordArr=str.split('-');
对于(变量i=0;i
我第一眼看到的代码问题:

  • 此代码
    var newStr+=fullword无效。声明变量时不能使用
    +=

  • 您必须使用
    fullWord
    而不是
    fullWord
    (注意
    w

  • 您需要在for循环之外声明(至少)
    newStr
    ,否则每次迭代都会初始化它


我第一眼看到的代码问题:

  • 此代码
    var newStr+=fullword;
    无效。声明变量时不能使用
    +=

  • 您必须使用
    fullWord
    而不是
    fullWord
    (注意
    w

  • 您需要在for循环之外声明(至少)
    newStr
    ,否则每次迭代都会初始化它


var newStr+=fullword;
在循环内重新声明,在循环外用初始值声明

替代方案

str = str.replace(/-(.)/g, function($1) { return $1.toUpperCase(); }).replace(/-/g, '');

var newStr+=fullword;
在循环中重新声明,请使用初始值在外部声明它

替代方案

str = str.replace(/-(.)/g, function($1) { return $1.toUpperCase(); }).replace(/-/g, '');

问题确实出在
+=

这是因为
+=
的目的是将一个字符串或数字添加到另一个字符串或数字中,但在这种情况下,您将其用于一个尚未分配任何内容的变量:
newStr
不能向其添加任何字符串,因为在您调用它时它不存在

您需要的是直接分配:

var newStr = fullword

问题确实出在
+=

这是因为
+=
的目的是将一个字符串或数字添加到另一个字符串或数字中,但在这种情况下,您将其用于一个尚未分配任何内容的变量:
newStr
不能向其添加任何字符串,因为在您调用它时它不存在

您需要的是直接分配:

var newStr = fullword
更简单的选择:

'this-has-been-camel-cased'.replace(/-./g, function (m) {
    return m[1].toUpperCase();
});
以下是一个函数:

function camelize(input, splitter) {
    if (!splitter) splitter = '-';
    return input.replace(new RegExp(splitter + '.', 'g'), function (m) {
        return m[1].toUpperCase();
    });
}
以及“无正则表达式”版本:

function camelize(input, splitter) {
    var i = 0;
    if (!splitter) splitter = '-';
    input = input.split(splitter);
    while (++i < input.length) {
        input[i] = input[i].charAt(0).toUpperCase() + input[i].slice(1);
    }
    return input.join('');
}
更简单的选择:

'this-has-been-camel-cased'.replace(/-./g, function (m) {
    return m[1].toUpperCase();
});
以下是一个函数:

function camelize(input, splitter) {
    if (!splitter) splitter = '-';
    return input.replace(new RegExp(splitter + '.', 'g'), function (m) {
        return m[1].toUpperCase();
    });
}
以及“无正则表达式”版本:

function camelize(input, splitter) {
    var i = 0;
    if (!splitter) splitter = '-';
    input = input.split(splitter);
    while (++i < input.length) {
        input[i] = input[i].charAt(0).toUpperCase() + input[i].slice(1);
    }
    return input.join('');
}

fullWord vs.fullWord.Capital W vs.lower case.fullWord vs.fullWord.Capital W vs.lower case.我已经尝试在
for循环
的内部和外部声明如上所示的变量。两种方式都只返回字符串的最后一个字,即“Cased”。我还尝试在声明下面添加
newStr+=fullWord
,但没有效果。我还简单地声明了
var newStr;
,然后将
newStr+=fullWord
放在下面。它们都只返回字符串的最后一个单词。知道如何让它显示所有单词吗?我尝试了如上所示声明变量h循环的
内部和外部
。两种方式都只返回字符串的最后一个字,即“Cased”。我还尝试在声明下面添加
newStr+=fullWord
,但没有效果。我还尝试了简单地声明
var newStr;
,然后将
newStr+=fullWord
放在下面。它们都只返回字符串的最后一个单词。你知道如何让它显示所有单词吗?