所以,就我自己的知识而言,因为我喜欢从不同的角度看待事物...... 我有以下一些Javascript代码,对于这个问题的意图和目的只会收到如下格式的字符串:“wordone wordtwo”:
function inName(inputName) {
return inputName.split(" ")[1].toUpperCase();
}
但是,这只会返回我想要的一半(“WORDTWO”)。我希望通过一次更改返回原始字符串:通过toUpperCase()返回的以空格分隔的第二个单词;然后重新连接到未触及的第一个单词。 我还想在返回线上不必要地运行所有操作。我的大脑说这是可能的,因为编译器如何从左到右读取行,并根据已解决的内容调整可用的成员函数。 Javascript中的所有内容都是一个对象,对吗? 为了我自己的好奇心帮助我,或者用我自己的误解打击我。 以下是使用“普通”语句解决上述问题的版本:
function inName(inputName) {
var nameArray=inputName.split(" ");
nameArray[1]=nameArray[1].toUpperCase();
return nameArray.join(" ");
}
答案 0 :(得分:2)
一行substr
,indexOf
和变量即时; - )
function inName(inputName) {
return inputName.substr(0, (index = inputName.indexOf(' '))) + inputName.substr(index).toUpperCase();
}
答案 1 :(得分:1)
这样的事情几乎就像它属于Code Golf,但这是我的看法:
function inName(inputName) {
return inputName.replace(/ .*/,function(m) {return m.toUpperCase();});
}
答案 2 :(得分:1)
这是另一个避免正则表达式的选项:
function inName(inputName) {
return inputName.split(' ').map(function(v,i){return i?v.toUpperCase():v;}).join(' ');
}
这与原始代码执行相同的拆分,然后将部件映射到一个函数,该函数返回索引0处的值不变,但索引1处的值为大写。然后将两个结果与空格连接在一起。
正如其他人所说,更长,更清晰的版本在实践中比试图提出一个聪明的单行更好。在return语句中定义一个函数就像是作弊一样; - )
答案 3 :(得分:0)
有趣。这是我对问题的看法
function justDoIt(str){
return [str = str.split(" ") , str.pop().toUpperCase()].join(" ");
}
创建一个新数组,str被拆分并重新分配为数组,并且新数组的第一项,然后第二个新数组项弹出最后一个单词,使其成为大写,将其放入新数组中。然后加入数组[["wordOne"],"WORDTWO"].join(" ")