Javascript不必要的压缩数组操作

Javascript Unnecessarily Compact Array Operations

本文关键字:数组 操作 压缩 不必要 Javascript      更新时间:2023-09-26

所以,据我所知,因为我喜欢从不同的角度看待事物。。。我有下面的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(" ");
 }

一行substrindexOf和一个动态变量;-)

function inName(inputName) {
 return inputName.substr(0, (index = inputName.indexOf(' '))) + inputName.substr(index).toUpperCase();
}

这里有另一个避免正则表达式的选项:

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

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

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

类似的东西似乎属于Code Golf,但我的看法是:

function inName(inputName) {
    return inputName.replace(/ .*/,function(m) {return m.toUpperCase();});
}

有趣。以下是我对问题的看法

function justDoIt(str){
    return [str = str.split(" ") , str.pop().toUpperCase()].join(" ");
}

创建一个新数组,str被拆分并重新分配为一个数组,新数组的第一个项目,然后第二个新数组项目弹出最后一个单词,使其大写,并将其放入新数组中。然后加入数组[["wordOne"],"WORDTWO"].join(" ")