无法在循环中推送函数 return

Unable to push a function return in a loop

我有这个函数,其中 returns 一个素数数组:

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 = [];

我想获取numbers数组中所有数字的质因数,并将其推入一个新的数组(array)

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

我做错了什么?

正如 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]));
}