数组过滤器不过滤
Array Filter not filtering
我正在尝试过滤一组随机数以提取素数。
我有一个工作函数 (isPrime
) return true
或 false
正确显示,但数组中的每个数字都是 "filtered"进入过滤器 returned 的数组。
我看了过滤器的文档,看了一些视频,但我还没弄明白,我想这可能与过滤器内部的函数调用有关。你能告诉我我的错误在哪里吗?
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()
是 returns 介于 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 的问题
"Why bottom for loop used to check the code gives numbers 5, 6 ... 997, 998"
在 javascript 中,数组基本上是对象。 for..in
是一个循环,它遍历对象的 keys 而不是值。因此,如果数组键是数组的索引,在上述情况下为 0...999
。所以它正在记录那些索引
我正在尝试过滤一组随机数以提取素数。
我有一个工作函数 (isPrime
) return true
或 false
正确显示,但数组中的每个数字都是 "filtered"进入过滤器 returned 的数组。
我看了过滤器的文档,看了一些视频,但我还没弄明白,我想这可能与过滤器内部的函数调用有关。你能告诉我我的错误在哪里吗?
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()
是 returns 介于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 的问题
"Why bottom for loop used to check the code gives numbers 5, 6 ... 997, 998"
在 javascript 中,数组基本上是对象。 for..in
是一个循环,它遍历对象的 keys 而不是值。因此,如果数组键是数组的索引,在上述情况下为 0...999
。所以它正在记录那些索引