代码之家  ›  专栏  ›  技术社区  ›  Ankur Soni

使用扩展参数连接字符串的最有效方法

  •  0
  • Ankur Soni  · 技术社区  · 8 年前

    我试图找到一种更好的方法来连接JavaScript ES6中的字符串。下面是当前代码段。

    方法1:

    function concat(...strings){
        return ''.concat(...strings);
    }
    

    方法2:

    function concat(...strings){
        return strings.join('');
    }
    

    例子:

    concat("Hey", "There", "How", "Are", "You"); // output is "HeyThereHowAreYou"
    

    我不确定这些方法的性能,因为参数的数量可能会增加。任何评论都将非常感谢,这可能是最好的或任何其他方法可以帮助。

    3 回复  |  直到 8 年前
        1
  •  2
  •   Ankur Soni    8 年前

    我建议使用 _.reduce 是的。 之所以说它在字符串数组周围使用+=类逻辑来连接,这是一种性能高效的方法 jsperf

    代码段:

        _.reduce(['x', 'y', 'z'], function(accumulator, currentItem) {
        return accumulator + currentItem;
    });
    // xyz
    

    参考:

    https://jsperf.com/concat-join-reduce

        2
  •  3
  •   Anand Jain    8 年前

    字符串连接可以通过多种方式完成

    • 加号(+)运算符。只要+运算符的一个操作数是字符串,它就会执行字符串连接。然后将另一个操作数转换为字符串。例子:

      “打招呼”+7+“快!” 快打7次招呼!

    • 或者,您可以在

      A+=B

      A=A+B

    • 连接字符串数组。收集要在数组中连接的字符串,然后将其联接。

    变量arr=[];

     arr.push("Say hello ");
    
     arr.push(7);
    
     arr.push(" times fast");
    
     arr.join("")
    ’Say hello 7 times fast’
    

    哪个更快?

    字符串是不可变的,其结果为字符串的大多数字符串操作都会生成新字符串。

    因此,像c或java这样的语言,其字符串处理类似于javascripts,它们有特殊的类来帮助连接字符串。例如,C调用这个类StringBuilder。然而,现代javascript引擎在内部优化了+运算符 1 是的。汤姆·舒斯特提到了绳子 2 作为一种可能的优化技术。因此,在javascript中不需要stringbuilder。

    只要用+=就行了。

    参考文献:

    重新: String concatenation Brendan Eich的电子邮件指出+在现代JavaScript引擎上更快。

    –156年 Ropes: an Alternative to Strings (1995) 作者:Hans-J.Boehm,Russ Atkinson,Michael Plass。

        3
  •  0
  •   Abhishek    8 年前

    /*If you're not sure about nos argument passed then use*/
    
    function concat() {
      const args = Array.from(arguments); /*convert arguments to array*/
      return args.join('');
    }
    
    var resultant_str = concat("Hey", "There", "How", "Are", "You");