小编Mig*_* G.的帖子

Javascript性能:reduce()vs for-loop

我正在尝试这个Codewars挑战,问题涉及找到一个数的除数,然后计算这些除数的平方和.我找到了解决这个问题的两种方法.

第一种方法是基于另一个关于找到所有除数之和的Stackoverflow问题,并且最初看起来很聪明:

function divisorsSquared(n) {
  // create a numeric sequence and then reduce it
  return [...Array(n+1).keys()].slice(1)
   .reduce((sum, num)=>sum+(!(n % (num)) && Math.pow(num,2)), 0);
}
Run Code Online (Sandbox Code Playgroud)

我使用的第二种方法是使用简单的for循环:

function divisorsSquared(n) {
  var sum = 0;
  for(var i = 1; i<= n; i++){
     if(n % i === 0) sum += Math.pow(i,2); 
  }
  return sum;
}
Run Code Online (Sandbox Code Playgroud)

现在我注意到第一种方法明显慢于第二种方法,快速jsperf测试证实了这一点.

我的问题是:为什么第一种方法如此慢,哪种方法在生产代码中更可取?

在Codewars上我注意到,对于许多挑战,使用类似的数组方法有一些聪明的单行解决方案.作为一个初学者,即使性能更差,这些解决方案可能被认为是比for循环更好的做法吗?

javascript arrays performance

12
推荐指数
3
解决办法
5006
查看次数

标签 统计

arrays ×1

javascript ×1

performance ×1