javascript - Array.map() 与 for 循环对字符串进行标题封装

标签 javascript arrays string for-loop array.prototype.map

我正在研究一个 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/

相关文章:

ruby - 比较两个数组并删除唯一值

javascript - 如何从 Javascript 中的对象属性连接多个数组?

C#:有没有一种方法可以在不使用正则表达式的情况下搜索字符串中的数字?

python - Python 中的 STRINGS 迭代(3)

javascript - 在 meteor 应用程序中如何在 cordova config.xml 中添加 orgin=*?

javascript - setInterval 可以消耗多少电池生命周期?

javascript - 自定义推特分享按钮

php - 显示警报 x 小时

java - 无法使用带有java的gson反序列化未知类型的数组

Java 字符串函数