【发布时间】:2020-06-21 11:00:23
【问题描述】:
我正在尝试通过 codewars.com katas 提高 javascript 的水平,但我遇到了一个练习,其中 element[i]=element[i].toLowerCase() 之类的东西根本没有改变任何东西。
我想对我的代码有一些帮助,这是练习的说明,后面是我的代码:
(请注意,我对 JS 不是很熟悉,所以代码可能根本不完美)
如果字符串中的每个单词都被认为是标题大小写 是:
- (a) 大写(即只有单词的第一个字母 大写)或
- (b) 被认为是一个例外,并且全部小写,除非它是第一个单词,并且总是大写。
编写一个函数,将字符串转换为标题大小写,给定一个可选的异常列表(次要单词)。次要单词列表将以字符串形式给出,每个单词用空格分隔。
您的函数应该忽略次要单词字符串的大小写——即使次要单词字符串的大小写发生更改,它也应该以相同的方式运行。参数:
- 第一个参数(必需):要转换的原始字符串。
- 第二个参数(可选):以空格分隔的次要单词列表,除了字符串中的第一个单词外,必须始终小写。当此参数未使用时,JavaScript/CoffeeScript 测试将通过
undefined。
function titleCase(title, minorWords) {
if(title.length==0){return ""}
var titlesplit = title.split(" ")
if(minorWords){
minorWords=minorWords.split(" ")
}
var solutionstring = ""
titlesplit.forEach(element => myfunction(element,minorWords))
solutionstring[0] = solutionstring[0].toUpperCase()
return solutionstring
function myfunction(element,minorWords){
var elementlength= element.length
var i=0
if(minorWords && minorWords.includes(element)){
for(i;i<elementlength;i++){
element[i]=element[i].toLowerCase()
}
}else {
for(i;i<elementlength;i++){
if(i==0){element[i]=element[i].toUpperCase()}
else{element[i]=element[i].toLowerCase()}
}
}
if(solutionstring.length==0){solutionstring=solutionstring+element}else{solutionstring=solutionstring+" "+element}
return
}
}
【问题讨论】:
-
你在“myfunction”中返回了什么?
-
字符串是不可变的。你不能这样做
var str = "abc"; str[0] = "d";- 它不会起作用。 -
除此之外,您似乎只需要
function titleCase(title, minorWords) {return title.toLowerCase().replace(/\w+/g, word=>minorWords && minorWords.indexOf(word) > -1 ? word : word[0].toUppercase()+word.slice(1));}-- 假设您实际上传入了minorWords的数组而不是空格分隔的字符串。 -
为什么
function myfunction()在titleCase()?为什么它在“之后”return ...?
标签: javascript