我正在寻找最快的逆转字符串函数。
以下是我找到的所有互联网上的函数及其性能测试:
https://jsperf.com/javascript-reversing-string-performance
看起来最快的一个(在我看来也是最美观的)是这个:
function reverseString(str) {
return str.split().reverse().join("");
}
也许有更高效、更快速的方法来完成这件事吗?
我正在寻找最快的逆转字符串函数。
以下是我找到的所有互联网上的函数及其性能测试:
https://jsperf.com/javascript-reversing-string-performance
看起来最快的一个(在我看来也是最美观的)是这个:
function reverseString(str) {
return str.split().reverse().join("");
}
function reverseString(str) {
let reversed = "";
const l = str.length;
for(let i = l-1; i >= 0; i--) {
reversed = `${reversed}${str[i]}`;
}
return reversed;
}
在JavaScript中,除了内置的reverse函数,可能有数十种不同的方法来解决字符串反转问题。以下是我认为最有趣的三种解决方案。
解决方案1
function reverseString (str) {
return str.split('').reverse().join('')
}
console.time("function test");
reverseString('Hello') // => 0.250ms
console.timeEnd("function test");
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");
function reverseString (str) {
return str.split('').reduce((reversed, character) => character + reversed, '')
}
console.time("function test");
reverseString('Hello') // => 0.133ms
console.timeEnd("function test");
function reverseString (str) {
return [...str].reverse().join('')
}
function reverseString(str) {
let reversed = ""
for (let i = str.length -1; i >= 0; i--){
reversed = reversed + str[i]
}
return reversed;
}
ArrayLike
类型,最快的反转方式是逻辑上的,通过将其包装成一个反转的可迭代对象:function reverse<T>(input: ArrayLike<T>): Iterable<T> {
return {
[Symbol.iterator](): Iterator<T> {
let i = input.length;
return {
next(): IteratorResult<T> {
return i
? {value: input[--i], done: false}
: {value: undefined, done: true};
},
};
},
};
}
for(const a of reverse([1, 2, 3])) {
console.log(a); //=> 3 2 1
}
这是最快的方法,因为您不需要复制数据,也不需要进行任何处理,只需逻辑上反转即可。
我在Firefox和Chrome中测试了我的方法,它是这里提供的方法中最快的。我只使用简单的for循环。
function reverseString5(str) {
let x = '';
for (let i = str.length - 1; i >= 0; --i) {
x += str[i];
}
return x;
}
所有测试都在这里运行