【发布时间】:2015-08-30 14:58:14
【问题描述】:
我正在尝试编写一个函数,该函数接受一个字符串并将每个单词中未包含在“minorWords”字符串中的第一个字母大写。我的代码中缺少什么导致返回值“未定义”?在用几种不同的方式编写了这个函数之后,我现在认为我只是错误地使用了 .forEach 。我相当确定我正确使用了三元运算符,但我尝试替换 if 语句并得到相同的结果(未定义)。我也不确定为什么 undefined 会被返回两次。 . .
function titleCase1(title, minorWords) {
var titleArray = title.split(" ");
var minorArray = minorWords.split(" ");
var newArray = titleArray.forEach(function(word){
(word in minorArray)? word :
word[0].toUpperCase() + word.slice(1);
})
console.log(newArray);
}
titleCase1("the wind in the willows", "the in");
// -> undefined undefined
我意识到如果这有效,第一个“the”将不会大写,但一旦我不再滥用我在这里拥有的工具,我就会弄清楚这一点。 . .
【问题讨论】:
-
那是因为你没有对
word或word[0].toUpperCase() + word.slice(1)做任何事情。您可能指的是map而不是forEach并忘记了return的值。 -
而
undefined不会返回两次,而是返回一次并记录一次。titleCase1中也没有return语句。 -
用 .map 替换 .forEach 并在三元条件之前添加 return 并解决了我遇到的问题,尽管(minorArray 中的单词)对于每个单词都被评估为 false 并且它们都大写,这是一个不同的问题。 . .
标签: javascript string foreach closures ternary