【问题标题】:Can I make this prime Finder code more concise?我可以让这个主要的 Finder 代码更简洁吗?
【发布时间】:2020-02-07 13:29:01
【问题描述】:

我觉得我在某个地方有一个额外的变量。

特别是找到的变量。有没有更短或更有效的方法来写这个?

// 2, 3, 5, 7, 11, 13, 17

function findPrimes(N){
  const primes = [2];

  for(let i = 2; i <= N; i++){
    let found = true;

    for(let j = 0; j < primes.length; j++){
      if( i % primes[j] === 0){
        found = false;
        break;
      }  
    }
    if(found){
      primes.push(i);
    }
  }
  return primes;
}

findPrimes(100);

【问题讨论】:

  • 有一个网站(代码审查)

标签: javascript primes


【解决方案1】:

取决于您希望代码的详细程度和字面意思。例如,这应该与您的算法完全等效:

// 2, 3, 5, 7, 11, 13, 17

function findPrimes(N) {
  const primes = [2];

  for (let i = 3; i <= N; i++) {
    if (!primes.some(n => i % n === 0)) {
      primes.push(i);
    }

  }

  return primes;
}

console.log(findPrimes(100));

【讨论】:

  • 忘记了一些高阶函数。你经常使用一些吗?
  • 是的,someevery 在使代码更简洁方面都非常有用。
  • 我记得在 Undersocre.js 中看到过它......奇怪的是,当它已经存在于 Arrays 的原型中时,他们构建了它。
  • @j.a. underscore 出来的时候,数组还没有这些功能。第 2 次。与例如 lodash 的实现相比,本机函数可能会非常缓慢,不一定是下划线。
  • 您不需要尝试偶数,因为您已经包含了唯一的偶素数:2。您的循环可以从 3 开始并逐步遍历奇数:3、5、7、9, 11,...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-10
  • 2014-05-01
  • 2021-12-07
  • 1970-01-01
  • 2011-08-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多