我正在尝试过滤随机数数组以提取素数。
我有一个工作函数(isPrime
),似乎可以正确返回true
或false
,但是数组中的每个数字都被“过滤”到过滤器返回的数组中。
我查看了过滤器的文档并观看了一些视频,但是我还没有弄清楚,我认为这可能与过滤器内部的函数调用有关。你能告诉我我的错误在哪里吗?
numArray = [];
for(i=0; i<1000; i++){
numArray.push(Math.random(1000));
}
const isPrime = (num) => {
for(i=2;i<num;i++){
if(num % i === 0){
return false;
}
}
return true;
}
const results = numArray.filter(value => isPrime(value));
for(num in results){
console.log(num);
console.log(isPrime(num)) //added to demonstrate function is working and should return false to the filter
}
您正在以错误的方式生成随机数。您的代码只会创建小于1
的浮点数组,因此根据您的isPrime
,它们都是素数。
注意:请勿在没有let
或cosnt
的情况下使用变量,否则可能导致代码中出现许多问题。
Math.random()
是返回在0
和1
之间的浮点数的函数。Math.floor()
将随机浮点数舍入为整数let numArray = [];
for(let i=0; i<10; i++){
numArray.push(Math.floor(Math.random() * 30));
}
const isPrime = (num) => {
for(let i=2;i<num;i++){
if(num % i === 0){
return false;
}
}
return true;
}
const results = numArray.filter(value => isPrime(value));
console.log(JSON.stringify(numArray))
console.log(JSON.stringify(results));
回答OP的问题
“为什么用于检查代码的循环的底部给出数字5、6 ... 997、998”
在javascript数组中基本上是对象。 for..in
是一个循环,循环访问对象的keys而不是值。因此,在上述情况下,如果数组键是数组的索引,则它们是0...999
。因此它正在记录那些索引