javascript - 仅将最后一个值推送到数组

标签 javascript primes

我正在研究素数算法,我几乎完成了它。我认为每次循环完成时输出数组都会更新,所以如果我用素数调用函数:例如 primes(7) ,我得到 [7] 而不是 [2,3,5,7]。如果使用非素数调用,则输出 arr 为空。

这里是代码:

function rimes(num){
    var outputArr = [];

    for(var i=1; i<=num; i++){  
        function range(start, count) {
            return Array.apply(0, Array(count))
                    .map(function (element, index) { 
                             return index + start;  
                         });
        }
        var rangeArr = range(1,num);
        var current = i;

        function rangeFiltering(value){
            return value !== 1 && value < current;
        }
        var filteredRange = rangeArr.filter(rangeFiltering);

        function dividingByEachRangeElement(rangeElement){
          return current % rangeElement !== 0;
        }
        var divided = filteredRange.filter(dividingByEachRangeElement);

        if(divided.length === num - 2){  //current is prime if there are all numbers from 1 to current in divided array.(if there are zeros after modulo) i.e. when current is 5(prime), divided array is [2,3,4]. When current is 6(non prime), divided arr is [4,5] - 2,3 are missing because 6%2 = 0 and 6%3 = 0. 
            outputArr.push(current);
        }
    }
    console.log(outputArr);
}
sumPrimes(47);


//sumPrimes(6)  -> [];
//sumPrimes(7)  -> [7];
//sumPrimes(11) -> [11];

我该如何解决这个问题?

最佳答案

您的问题已上线:

if(divided.length === num - 2)

这意味着只有当divided的长度恰好等于num - 2时,当前数字才会被添加到outputArr,这仅在以下情况下为真:在您的示例中,icurrent 等于 7

将其更改为:

if(divided.length === current - 2)

应该可以解决问题。

关于javascript - 仅将最后一个值推送到数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37470887/

相关文章:

javascript - 为什么我不能重用 CSS 关键帧动画?

algorithm - 返回所有小于 M 的素数

javascript - 从 HTML 表中的 JSON url 加载数据,不重复

javascript - 当输入值无效时如何禁用按钮

Lisp 代码没有响应

java - 我真的不明白我的讲师在这里说的是什么——关于用 Java 计算素数的讲义

javascript - 求250以下的素数之和

python - 为什么我的第一个查找素数的函数比另一个函数花费的时间要长得多?

javascript - 在 angularjs 中使用 'dot' 有什么区别?

JavaScript 使用复杂的 json 文件