我正在研究一个 FreeCodeCamp 算法问题,其中要求我对给定的字符串进行标题大小写,例如使每个单词的第一个字母大写。我设法使用以下代码做到这一点:
function titleCase(str) {
var wordArr = str.split(" ");
for(var i=0; i<wordArr.length; i++){
wordArr[i] = wordArr[i].charAt(0).toUpperCase() + wordArr[i].slice(1).toLowerCase();
}
return wordArr.join(" ");
}
但我首先尝试以如下方式使用 array.map() :
function titleCase(str) {
var wordArr = str.split(" ");
var newArr = wordArr.map(function(word){
word = word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();
});
return newArr;
}
我什至没有尝试连接(即使用.join()
)数组,因为它是一个null值的数组。为什么 array.map()
在这种情况下不起作用?或者我只是在某个地方犯了一个愚蠢的错误?
最佳答案
Array.prototype.map
接受一个采用原始值的函数,并且应该返回一个投影值。
您的函数不返回任何内容,它只是重新分配 word
值,这不会影响任何内容,因为 word
是局部变量。
这是map
函数的正确用法:
var wordArr = str.split(" ");
var newArr = wordArr.map(function(word){
return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();
});
return newArr;
演示:
function titleCase(str) {
return str.split(" ").map(function(word){
return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();
});
}
console.log(titleCase("hello") + " " + titleCase("world") + "!");
关于javascript - Array.map() 与 for 循环对字符串进行标题封装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42777742/