2017-04-05 601 views
0

我想通过一个函数传递一个短语,以便每个第一个字母都大写,其他所有字母都是小写。我有以下功能:为什么我的for循环在函数内部使用push不起作用?

function titleCase(str) { 
    var array = []; 

    for (var i = 0; i <= str.length; i++) { 
    str = str.split(' '); 
    str = str[i].toLowerCase(); 
    str = str.charAt(0).toUpperCase() + str.substr(1, str.length); 
    array = array.push(str); 

    return array.push(str); 
    } 
} 

titleCase("SenTencE TesT"); 

没有for循环的功能,工程和将小写一切,然后为每个字的第一个字母。

+1

你正在返回array.push的结果,这是一个数字 – m0meni

+2

你的返回在你的for循环中,所以它只会运行一次 –

+0

因为你把“return array.push(str);”它会在第一次迭代时返回函数值,但是第二,第三等将永远不会被触发。 – Kadaj

回答

2

[编辑]

很多方法可以做到,但尝试这个...

function titleCase(string) { 
    var array = string.split(' '); 
    var newString = ''; 
    for (var i = 0; i <= array.length-1; i++) { 
     array[i] = array[i].toLowerCase(); 
     array[i] = array[i].charAt(0).toUpperCase() + array[i].substr(1, array[i].length); 
     newString += array[i] + ' '; 
    }; 
    return newString.trim(); 
}; 

console.log(titleCase("SenTencE TesT")); 
+0

我得到以下错误代码:TypeError:无法读取未定义的属性'toLowerCase'。 – arziankorpen

+0

在答案中查看我的编辑。 – Slime

+0

工作。谢谢您的帮助。 – arziankorpen

0

1)不要命名变量数组,这是一个JavaScript保留字,你可以使用“arr”作为例子。

2)在你的代码中,你正在将句子拆分成一个单词数组,但是你只将toLowerCase应用到第一个单词。

3)有达到你想要的结果更清洁的方式:

function capitalize(str) { 
    return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase(); 
} 
console.log(capitalize("sentence TesT")); 

希望它能帮助。

+0

这只适用于第一个字母,例如它将'句子TesT'转换为'句子测试',但我正在寻找的是'句子测试',并且在第二个单词上也首字母大写。 – arziankorpen

+0

我猜Waxi回答了你的问题:) –

相关问题