使用传播参数连接字符串的最有效方法

时间:2018-06-26 05:04:35

标签: javascript ecmascript-6 string-concatenation

我正在尝试找到一种更好的方法来连接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 个答案:

答案 0 :(得分:3)

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

  • 加(+)运算符。一旦运算符之一是字符串,+运算符就会进行字符串连接。然后,另一个操作数将转换为字符串。示例:

      

    “问好” + 7 +“快!”   ‘快打招呼7次!’

  • 或者,您可以使用+ =其中

      

    a + = b

    的缩写
      

    a = a + b

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

  

var arr = [];

 arr.push("Say hello ");

 arr.push(7);

 arr.push(" times fast");

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

哪个更快?

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

因此,诸如C#或Java之类的字符串处理类似于JavaScript的语言具有特殊的类,可帮助串联字符串。例如,C#调用此类StringBuilder。但是,现代JavaScript引擎会在内部1内优化+运算符。汤姆·舒斯特(Tom Schuster)提到绳索2是一种可能的优化技术。因此,在JavaScript中不需要StringBuilder。

只需使用+ =即可完成。

参考文献:

“ Re:String concatenation” –布伦丹·艾希(Brendan Eich)的电子邮件,指出+在现代JavaScript引擎上速度更快。

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

答案 1 :(得分:2)

我建议继续使用_.reduce。 有人说它在字符串数组周围使用+ =类型的逻辑来连接,这是高效的 jsperf

摘要:

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

参考:

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

答案 2 :(得分:0)

/*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");