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

最佳答案

这是避免使用正则表达式的另一个选项:

function inName(inputName) {
    return inputName.split(' ').map(function(v,i){return i?v.toUpperCase():v;}).join(' ');
}

这与原始代码执行相同的拆分,然后将部分映射到一个函数,该函数返回索引 0 处的值不变,但索引 1 处的值以大写形式返回。然后将两个结果用空格重新连接在一起。

正如其他人所说,在实践中,更长、更清晰的版本比试图提出一个聪明的单行更好。在 return 语句中定义一个函数感觉就像在作弊 ;-)

关于Javascript 不必要的压缩数组操作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33836153/

10-14 10:34
查看更多