Javascript 避免嵌套 For 循环

标签 javascript arrays

我注意到,当有更好的选项可用时,我的算法解决方案通常包括丑陋的嵌套 for 循环。在下面的示例中,如何在不使用嵌套循环的情况下确定给定参数之前的素数?该作业的一项限制是使用任何外部函数。

function sumPrimes(num) {
    var p = [];
    for (var i = 2; i <= num; i++)
    {
        p.push(i);
        for (var j = 2; j < i; j++)
        {
            if (i % j === 0) //not a prime
            {
                p.pop(i);
                break;
            }
        }
    }
    return p;

最佳答案

我不知道是否还有其他好的解决方案,但我想出了这个。还有一个 for 循环;)

function primes(num) {
  return Array.apply(null, {length: (num + 1)}).map(Number.call, Number)
   .filter(function(n) {
     for(var i = 2; i < n; i++) {
       if(n % i === 0) return false;
     }
     return n !== 0 && n !== 1;
   })
 }

说明:

Array.apply(null, {length: (num + 1)}).map(Number.call, Number)

该行创建一个具有传递参数范围的数组。如果num5,它将创建以下数组:[0, 1, 2, 3, 4, 5]。我找到了这个here .

然后我使用 filter 函数删除所有非素数。如果过滤器函数返回false,则该数字将从数组中删除。因此,在过滤函数中,我们检查当前数字是否是素数。如果是,则返回true。正如你所看到的,我在这里仍然使用普通的 for 循环。

不,您可以按如下方式调用该函数:primes(28);

这将返回以下数组:[ 2, 3, 5, 7, 11, 13, 17, 19, 23 ]

在这种特定情况下,我想说使用普通的 for 循环是绝对可以的。但在操作数组时,请始终考虑使用 mapreducefilter 等函数。

关于Javascript 避免嵌套 For 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43129567/

相关文章:

javascript - 使用 jquery .load 函数重新加载 DIV 花费的时间太长

javascript - 有没有办法控制弹出器中嵌套的 Material UI 选择在 DOM 中的安装位置?

javascript - 如何使用react获取html格式的表格?

PHP:数组 $_POST 循环问题

javascript - 如何在两个对象数组中合并具有相同键的属性?

javascript - 了解制作网格(Eloquent js 第 6 章)

javascript - 告诉用户在表单的特定步骤中做什么

c - 为文本文件的每个新行搜索符号 ';' 和符号 '.' 的出现

javascript - 在 JavaScript 中测试包含单个空字符串的数组

java - 如何创建具有随机数量值的数组