【问题标题】:Prepend text to beginning of string将文本添加到字符串的开头
【发布时间】:2011-08-30 22:46:45
【问题描述】:

什么是最快的方法,在字符串的开头添加一个新值?

【问题讨论】:

    标签: javascript string performance concat jsperf


    【解决方案1】:
    var mystr = "Doe";
    mystr = "John " + mystr;
    

    这不适合你吗?

    【讨论】:

    • Wait 不能使用 += 或将其添加到末尾
    • @JuicY_Burrito += 附加到文本末尾。
    【解决方案2】:

    你可以这样做..

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

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


    【讨论】:

    • 我很想为 xkcd 地带投票。好东西!您的优雅解决方案很可能更慢,因为它实例化了正则表达式处理器。
    • @Rolf 不太可能。它肯定prestring + 'original string'; 解决方案慢。
    • @GabrielePetrioli 优点是您可以添加到您的点链(管道)。你甚至可以附加一些东西,比如 mystr.replace (/$/,' by Gabriele')。它可能会慢一些,但这正是我想要的。
    • 或许这应该是新标准:每篇文章还必须包含相关的 XKCD。
    • 不知为何我以为桌上的电脑其实是摇篮里的婴儿,还觉得这家伙打婴儿很奇怪。
    【解决方案3】:

    由于问题是关于什么是最快 方法,我想我会抛出一些性能指标。

    TL;DR 优胜者是+ 运算符,永远不要使用正则表达式

    https://jsperf.com/prepend-text-to-string/1

    【讨论】:

    • 因为我们要测试 prepend,而不仅仅是连接,我已经更新了测试:jsperf.com/prepend-text-to-string/5
    • @metalim,您对测试是否有任何重大更改?前置只是字符串连接的有序一半。此外,对于 jsPerf,您不需要将测试用例置于循环中; jsPerf 调用每个方法数千次以获得分数基线。性能测试优化了特定场景,我不确定它在同一字符串前 1000 次的常见程度。
    • 如果将短字符串附加到长字符串,或将长字符串附加到短字符串,可能会有显着差异。由于我们对 prepending 短字符串到任意字符串感兴趣,这就是在测试中所做的:将短字符串添加到增加更长的字符串。循环用于测试 1000 种不同长度的后缀字符串,以避免测试太短或太长。 @KyleMit,如果您有更好的想法,请随时在下一次测试迭代中实现它。
    【解决方案4】:

    ES6:

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

    【讨论】:

    • 虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您正在为将来的读者回答问题,而这些人可能不知道您的代码建议的原因。也请尽量不要用解释性的 cmets 挤满你的代码,这会降低代码和解释的可读性!
    • ES6:字符串插值
    【解决方案5】:

    你也可以这样做

    "".concat("x","y")
    

    【讨论】:

    • 为什么不是 "x".concat("y")?只是为了添加另一个字符串实例化并使其变慢?
    【解决方案6】:

    如果您想使用名为 ES 2015(又名 ES6)或更高版本的 Javascript,您可以使用 ES 2015 引入并由一些指南(如 Airbnb's style guide)推荐的 template strings

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

    【讨论】:

      【解决方案7】:

      另一种选择是使用join

      var mystr = "Matayoshi";
      mystr = ["Mariano", mystr].join(' ');
      

      【讨论】:

        【解决方案8】:

        你可以使用

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

        【讨论】:

          猜你喜欢
          • 2019-09-19
          • 1970-01-01
          • 2017-02-07
          • 1970-01-01
          • 2023-03-07
          • 1970-01-01
          • 1970-01-01
          • 2011-07-26
          • 2023-03-05
          相关资源
          最近更新 更多