当title-casing为字符串时,Array.map()与for循环

时间:2017-03-14 04:25:11

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

我正在研究一个FreeCodeCamp算法问题,我被要求标题化一个给定的字符串,就像使每个单词的首字母大写一样。我设法使用此代码:

.join()

但我开始尝试以这样的方式使用array.map():

array.map()

我甚至懒得尝试连接(即使用var mydata = [array_name, array_score])数组,因为它是一个 null 值的数组。为什么<div class="lable_time"> <div class="stime"> <select value="Start-Time"> <option selected value="null">Start-Time*</option> <option value="1:00">1:00</option> <option value="2:00">2:00</option> </select> </div> <div class="stime_meridian"> <select value="AM-PM"> <option selected value="null">AM</option> <option value="PM">PM</option> </select> </div> <div class="time"> <select value="End-Time"> <option selected value="null">End-Time*</option> <option value="1:00">1:00</option> <option value="2:00">2:00</option> </select> </div> <div class="time_meridian"> <select value="AM-PM"> <option selected value="null">AM</option> <option value="PM">PM</option> </select> </div> </div> 没有在这种情况下工作?或者我只是在某个地方犯了一个愚蠢的错误?

3 个答案:

答案 0 :(得分:2)

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;

演示:

&#13;
&#13;
function titleCase(str) {
  return str.split(" ").map(function(word){
    return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();
  });
}

console.log(titleCase("hello") + " " + titleCase("world") + "!");
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您应该在地图功能

内返回

示例代码:

function titleCase(str) {
  var wordArr = str.split(" ");
  var newArr = wordArr.map(function(word){
    return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();
  });
  return newArr.join(' ');
}

答案 2 :(得分:0)

  

为什么array.map()在这种情况下没有工作?

根据.map()的MDN文档:

  

map()方法创建一个新数组,其中结果在此数组中的每个元素上调用提供的函数。

在该语句中暗示,.map()需要来自每次调用的结果,并且为此使用return关键字为每次迭代发回值。否则,该值(即分配给word)未被使用(在回调函数之外)。请参阅下面的代码中演示的内容。

function titleCase(str) {
  return str.split(" ").map(function(word){
    return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();
  });
}

console.log(titleCase("title case this string"));

P.S。如果您想了解更多关于Javascript函数式编程的知识,我建议您浏览this page上的练习。