在字符串开头添加文本

168

如何最快地在字符串的开头添加一个新值?

9个回答

321
var mystr = "Doe";
mystr = "John " + mystr;

这个对你行不行呢?


1
等等,使用 += 也可以吗?还是它会添加到末尾? - user6913790
6
@JuicY_Burrito += 在文本末尾追加内容。 - Mark Kramer

172
你可以这样做...

var mystr = 'is my name.';
mystr = mystr.replace (/^/,'John ');

console.log(mystr);

免责声明: http://xkcd.com/208/


等等,忘记转义一个空格。 Wheeeeee[taptaptap]eeeeee.


30
我很想点赞这个xkcd漫画,太棒了!你的优雅解决方案可能会更慢,因为它会实例化正则表达式处理器。 - Rolf
23
@Rolf不是大概比较慢,而是肯定比prestring + 'original string';的解决方案要慢。 - Gabriele Petrioli
3
优点在于你可以直接添加到你的点(管道)链中。你甚至可以追加一些内容,例如 mystr.replace(/$/, ' by Gabriele')。虽然可能会慢一些,但这正是我想要的。 - Mateja Petrovic
1
不用担心。https://jsperf.com/prepend-text-to-string/5 它只比简单的string+string慢50-100倍。但你仍然可以使用你的正则表达式技能。这比减速更重要,对吧? - metalim

84

1
既然我们想测试prepend而不仅仅是连接,我已经更新了测试:https://jsperf.com/prepend-text-to-string/5 - metalim
@metalim,你在测试中有没有做出任何值得注意的实质性改变?Prepend只是字符串连接的有序一半。此外,在jsPerf中,您不需要将测试用例放入循环中;jsPerf会调用每种方法数千次以获得基准分数。性能测试优化特定场景,我不确定将同一字符串prepend 1,000次有多常见。 - KyleMit
如果将短字符串附加到长字符串或将长字符串附加到短字符串,差异可能会很大。由于我们对在任意字符串前添加短字符串感兴趣,因此在测试中执行了这项任务:将短字符串前置到逐渐变长的字符串中。循环用于测试1000个不同长度的后缀字符串,以避免仅测试短字符串或长字符串。如果你有更好的想法,@KyleMit,请随时在下一次测试迭代中实现它。 - metalim

18

ES6:

let after = 'something after';
let text = `before text ${after}`;

11
尽管这段代码可以解决问题,但包括一些解释真的有助于提高您发布内容的质量。请记住,您正在回答未来读者的问题,而这些人可能不知道您建议代码的原因。同时,请尽量避免在代码内加入过多的解释性注释,这会降低代码和解释的可读性! - kayess
2
ES6: 字符串插值 - Bryan Grace

8
你也可以这样做。
"".concat("x","y")

4
为什么不用"x".concat("y")呢?只是为了增加字符串实例化并使其变慢吗? - metalim

7

如果您想使用名为ES 2015(又称ES6)或更高版本的JavaScript,您可以使用ES 2015引入并在某些指南(如Airbnb风格指南)中推荐使用的 模板字符串

const after = "test";
const mystr = `This is: ${after}`;

2
另一个选项是使用加入
var mystr = "Matayoshi";
mystr = ["Mariano", mystr].join(' ');

1

1
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心找到有关如何编写良好答案的更多信息。 - Community
这实际上是一个不错的(函数式)答案……例如它允许您执行a = b?.padStart(b.length + 1, '/'),相当于(我认为)不太组合的a = b && /${b}` ``。 - som

0

您可以使用

var mystr = "Doe";
mystr = "John " + mystr;
console.log(mystr)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接