Не могли бы вы прислать мне несколько ответов?
Коды:
Номер 1:
function reverseString(str){
return str.split('').reverse().join('');
}
Номер 2:
function reverseString(str){
if (str.length == 1) return str;
return str[str.length - 1] + (reverseString(str.slice(0,str.length - 1)));
}
Большое спасибо!
Сравните их и узнайте. Также рекомендуется прочитать: ericlippert.com/2012/12/17/производительность-разглагольствования
Рекурсивный кажется немного медленнее. Я бы предложил третий вариант: простой цикл for
и конкатенацию строк.
NB: недостатком рекурсивного решения является то, что оно может столкнуться с переполнением стека, когда строка длинная.
Для измерения производительности вы можете использовать файл Benchmark.js:
function reverseString1(str) {
return str.split('').reverse().join('');
}
function reverseString2(str) {
if (str.length == 1) return str;
return str[str.length - 1] + (reverseString2(str.slice(0,str.length - 1)));
}
function reverseString3(str) {
let result = "";
for (let i = str.length; i--;) result += str[i];
return result;
}
// An input string of 200 characters:
let str = "asirjsmpfuenndlsuegi".repeat(20);
console.info("Tests...");
const suite = new Benchmark.Suite("reverse string");
suite.add("split&join", () => reverseString1(str))
.add(" recursive", () => reverseString2(str))
.add(" for-loop", () => reverseString3(str))
.on('cycle', (event) => console.info(String(event.target)))
.on('complete', () =>
console.info('Fastest is: ' + suite.filter('fastest').map('name')))
.run({ 'async': true });
<script src = "https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.16.4/lodash.min.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/benchmark/2.1.4/benchmark.js"></script>
Вы пытались сравнить оба, чтобы увидеть разницу в производительности?