是否有更快的JavaScript反向字符串算法?

时间:2018-01-09 18:46:48

标签: javascript algorithm performance

所以我正在寻找尽可能快的反向字符串函数。

以下是我的功能以及我在互联网上发现的所有功能及其性能测试:

https://jsperf.com/javascript-reversing-string-performance

看起来最快的(我认为最漂亮的)是这样的:

function reverseString(str) {
  return str.split().reverse().join("");
}

但也许有更有效,更快捷的方法来做到这一点?

4 个答案:

答案 0 :(得分:1)

有几种不同的方法可以做到这一点,不包括内置的反向功能,因为JavaScript没有。 下面是我解决在JavaScript中反转字符串问题的三种最有趣的方法。

解决方案1 ​​

function reverseString (str) {
  return str.split('').reverse().join('')
}

console.time("function test");
reverseString('Hello') // => 0.250ms
console.timeEnd("function test");

解决方案2

function reverseString (str) {
  let reversed = '';
  for (const character of str) {
    reversed = character + reversed
  }
  return reversed
}
console.time("function test");
reverseString('Hello') // => 0.166ms
console.timeEnd("function test");

解决方案3

function reverseString (str) {
  return str.split('').reduce((reversed, character) => character + reversed, '')
}
console.time("function test");
reverseString('Hello') // => 0.133ms
console.timeEnd("function test");

在ES6中,您还有一个选项

function reverseString (str) {
  return [...str].reverse().join('')
}

答案 1 :(得分:1)

function reverseString(str) {
    let reversed = ""
    for (let i = str.length -1; i >= 0; i--){
        reversed = reversed + str[i]
    }
    return reversed;
}

从输入字符串的末尾开始工作是最佳的,尤其取决于您如何组合字符。请记住,当您通过在开头插入(或删除)元素来修改数组时,所有其他元素都必须调整其索引。

答案 2 :(得分:0)

基于davaakhuu-erdenekhuu解决方案,我创建了一个基准,以便您可以测试最适合自己的基准 https://jsbench.me/4bkfflcm2z

我已经在Macbook pro的Firefox和Chrome上运行了它16 似乎第一个选项在Firefox上最快,而第三个选项在Chrome上最快

希望您发现它有用

答案 3 :(得分:0)

这似乎更快:

LocalDate