哪一个代码更有效?

时间:2019-04-08 17:44:54

标签: javascript algorithm

您能给我一些答案吗?

代码:

数字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)));
}

非常感谢您!

2 个答案:

答案 0 :(得分:0)

基于此jsperf,在带有Windows 10的Chrome 73上进行测试时,您的第一个函数(第1个)的执行速度似乎更快。值得注意的是,此处计算出的差异可以忽略不计。

请注意,您可以使用jsperf之类的网站来创建自己的基准。

答案 1 :(得分:0)

递归的似乎有点慢。我建议第三个选择:简单的 List<String> imeiList = mongoTemplate.query(Device.class) .distinct("imei") .as(String.class) .all(); 循环和字符串连接。

注意:递归解决方案的缺点是,当字符串很长时,它可能会遇到堆栈溢出。

您可以使用Benchmark.js来衡量性能:

for
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.log("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.log(String(event.target)))
     .on('complete', () => 
         console.log('Fastest is: ' + suite.filter('fastest').map('name')))
     .run({ 'async': true });