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);