javascript - 数组过滤器不过滤
问题描述
我正在尝试过滤一组随机数以提取素数。
我有一个工作函数 ( 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
是一个循环,它遍历对象的键而不是值。因此,如果数组键是0...999
上述情况下的数组索引。所以它正在记录那些索引
推荐阅读
- wordpress - 按当前分类过滤 ACF 帖子对象
- xml - 使用 XSLT 计算视频播放列表的开始时间
- angular - 如何修复更新日期?
- javascript - 将验证 vee-validate 添加到 vue 文件
- esp8266 - ESP8266 NodeMCU MicroPython 串行垃圾,无法擦除闪存或上传文件
- javascript - 从对象中的数组中提取所需的数字
- arcore - 如何使用 SceneForm 从 ViewRenderable / Node 创建位图?
- html - 带有文本的 Jquery load() 方法
- javascript - 调用 API 后,我无法检测到 innerHTML 中的 api 数据
- scala - 依赖类型的类型类实例