为什么我的函数只返回一个只有一个元素的数组?

时间:2015-03-16 07:27:26

标签: 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; ++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

Jsbin

3 个答案:

答案 0 :(得分:1)

将代码的第14行更正如下,它就像魅力一样 for(currCompose = 2; currCompose&lt; = initNum; ++ currCompose)

答案 1 :(得分:1)

您不应该将initNumcurrCompose进行比较。请注意,initNum是您要检查的号码(例如,71),而currCompose最多只会ceil(sqrt(initNum))(例如9),因此两者永远不会相等。< / p>

另请注意,最好附加到列表并验证只有在内部循环完成后才能找到除数。

此修改版本有效。

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

答案 2 :(得分:0)

function FindPrime(numbers){
  if(numbers.constructor === Array){
    output = [];
    for (var i = numbers.length - 1; i >= 0; i--) {
      if(isPrime(numbers[i]) == true){
        output.push(numbers[i]);
      };
    };
    return output;
  }


}

function isPrime(numb){
  if (numb % 2 == 0) return false;
  for (var i=3; i<= Math.sqrt(numb); i = i + 2) {
    if (numb % i == 0) {
     return false;
    }
  }
  return true;
}

numbers = [1,2,3,4,5];
test = FindPrime(numbers);
console.log('testing', test);