gpt4 book ai didi

Javascript 避免嵌套 For 循环

转载 作者:行者123 更新时间:2023-11-28 04:48:38 25 4
gpt4 key购买 nike

我注意到,当有更好的选项可用时,我的算法解决方案通常包括丑陋的嵌套 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com