无法在循环

时间:2017-05-26 19:06:19

标签: javascript function loops push

我有这个函数返回一个素数数组:

function getPrimeFactors(n) {
  var factors = [];
  for (i = 2; i <= Math.sqrt(n); i++) {
    if (n % i === 0) {
      var count = 0;
      while (n % i === 0) {
        n = n / i;
        count++;
      }
      for (j = 1; j <= count; j++) {
        factors.push(i);
      }
    }
  }
  if (n !== 1) {
    factors.push(n);
  }
  return factors;
}

var numbers = [2, 3, 4, 5];
var array = [];

我想获得数字数组中所有数字的素数因子并将其推入新数组(数组)

for(i = 0; i < numbers.length; i++) {    
  array.push(getPrimeFactors(numbers[i]));
}

我做错了什么?

1 个答案:

答案 0 :(得分:0)

正如Damien Gold在删除的答案中所提到的,在你的for循环中使用var来使变量成为局部变量并防止你的2个函数相互干扰。

function getPrimeFactors(n) {
  var factors = [];
  for (var i = 2; i <= Math.sqrt(n); i++) {
    if (n % i === 0) {
      var count = 0;
      while (n % i === 0) {
        n = n / i;
        count++;
      }
      for (var j = 1; j <= count; j++) {
        factors.push(i);
      }
    }
  }
  if (n !== 1) {
    factors.push(n);
  }
  return factors;
}

var numbers = [2, 3, 4, 5];
var array = [];

for(var i = 0; i < numbers.length; i++) {    
  array.push(getPrimeFactors(numbers[i]));
}

作为旁注, 您正在将数组推送到数组中,而不是添加getPrimeFactors数组中包含的值。如果您想将结果数字推送到一个数组中,请尝试:

for(var i=0; i<numbers.length; i++) {    
    array = array.concat(getPrimeFactors(numbers[i]));
}