Javascript 为什么我的函数只返回一个元素的数组?
我正在编写一个函数,它将返回一个带有素数的数组 函数应该返回一个包含Javascript 为什么我的函数只返回一个元素的数组?,javascript,arrays,return,Javascript,Arrays,Return,我正在编写一个函数,它将返回一个带有素数的数组 函数应该返回一个包含n元素的数组。(n是一个参数),但它只返回一个元素。为什么? 我的代码: function findPrimes(n) { var arr = []; var currIndex = 0; var sqrtNum; var ceiledNum; var ceiledIndex = 0; var currCompose; var res; for (initNum = 2; arr.length &
n
元素的数组。(n是一个参数),但它只返回一个元素。为什么?
我的代码:
function findPrimes(n)
{
var arr = [];
var currIndex = 0;
var sqrtNum;
var ceiledNum;
var ceiledIndex = 0;
var currCompose;
var res;
for (initNum = 2; arr.length < n; ++initNum)
{
sqrtNum = Math.sqrt(initNum);
ceiledNum = Math.ceil(sqrtNum);
for (currCompose = 2; currCompose <= ceiledNum; ++currCompose)
{
res = initNum % currCompose;
if (res == 0 && initNum != currCompose)
{
break;
}
else if (res == 0 && initNum == currCompose)
{
arr[currIndex] = initNum;
++currIndex;
break;
}
else if (res != 0 && initNum != currCompose)
{
continue;
}
else
{
console.log("Impossible result!");
}
}
}
return arr;
}
findPrimes(2); //return 2
findPrimes(10); //return 2 too
函数findTime(n)
{
var-arr=[];
风险价值指数=0;
var-sqrtNum;
黄花变种;
var ceiledIndex=0;
变异系数;
var-res;
对于(initNum=2;arr.length 对于(currcomose=2;currcomose请按如下所示更正代码的第14行,它的工作方式很有魅力。
对于(currCompose=2;currCompose函数findTime(数字){
if(numbers.constructor==数组){
输出=[];
对于(var i=numbers.length-1;i>=0;i--){
if(isPrime(数字[i])==true){
输出推送(数字[i]);
};
};
返回输出;
}
}
函数isPrime(numb){
if(numb%2==0)返回false;
对于(var i=3;i您不应该将initNum
与currcomose
进行比较。请记住initNum
是您正在检查的数字(比如说71),而currcomose
最多是ceil(sqrt(initNum))
(比如说9),因此两者永远不会相等
还要注意,最好附加到列表中,并验证只有在内部循环完成后才找到除数
这个修改过的版本有效
function findPrimes(n)
{
var arr = [];
var currIndex = 0;
var sqrtNum;
var ceiledNum;
var ceiledIndex = 0;
var currCompose;
var res;
var initNum;
for (initNum = 2; arr.length < n; ++initNum)
{
sqrtNum = Math.sqrt(initNum);
ceiledNum = Math.ceil(sqrtNum);
for (currCompose = 2; currCompose <= ceiledNum; ++currCompose)
{
res = initNum % currCompose;
if (res == 0 && initNum != currCompose)
{
break;
}
}
if (currCompose == ceiledNum+1)
{
arr[currIndex] = initNum;
++currIndex;
}
}
return arr;
}
var primes = findPrimes(6);
document.write(primes);
函数findTime(n)
{
var-arr=[];
风险价值指数=0;
var-sqrtNum;
黄花变种;
var ceiledIndex=0;
变异系数;
var-res;
var initNum;
对于(initNum=2;arr.length 对于(currcomose=2;currcomose)此解决方案不使用只需要检查sqrt(initNum)以下的除数的优化。@GregPrisament您的意思是什么?@AnilSh给出的解决方案检查2…initNum范围内的除数。但是一个有效的实现应该只检查2…sqrt(initNum)范围内的除数。也就是说,您希望保留:for(currcomose=2;currcomose哦,我同意。使用initNum太广泛了。您的答案和@AnilSh答案都有效,但您的答案可以加快过程。您使用的JSBin工具的一个问题是它显示了[2]
作为2
,我觉得有点混乱。您上面的代码返回的列表中有1项,这不是正确的答案(请参阅下面的解决方案),但至少它是正确的数据类型。
function findPrimes(n)
{
var arr = [];
var currIndex = 0;
var sqrtNum;
var ceiledNum;
var ceiledIndex = 0;
var currCompose;
var res;
var initNum;
for (initNum = 2; arr.length < n; ++initNum)
{
sqrtNum = Math.sqrt(initNum);
ceiledNum = Math.ceil(sqrtNum);
for (currCompose = 2; currCompose <= ceiledNum; ++currCompose)
{
res = initNum % currCompose;
if (res == 0 && initNum != currCompose)
{
break;
}
}
if (currCompose == ceiledNum+1)
{
arr[currIndex] = initNum;
++currIndex;
}
}
return arr;
}
var primes = findPrimes(6);
document.write(primes);