Javascript不必要的紧凑阵列操作

时间:2015-11-20 21:12:35

标签: javascript arrays object

所以,就我自己的知识而言,因为我喜欢从不同的角度看待事物...... 我有以下一些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(" ");
 }

4 个答案:

答案 0 :(得分:2)

一行substrindexOf和变量即时; - )

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(" ")