【问题标题】:Unable to push a function return in a loop无法在循环中推送函数返回
【发布时间】:2017-05-26 19:06:19
【问题描述】:

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

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

我做错了什么?

【问题讨论】:

  • 我点了正确的答案然后消失了……谁删除了正确的答案?大声笑
  • 顺便说一句,等待将推回正确答案的人:D您需要在循环内为您的 i 变量使用 var ,否则 i 被视为全局变量。当然,也将 var 应用于 j,即使 j 只使用一次,这里的问题是 i
  • 感谢您的帮助。正确声明变量是我的问题。

标签: javascript function loops push


【解决方案1】:

正如 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-array 中包含的值。如果您想将结果数字推送到一个数组中,请尝试以下操作:

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

【讨论】:

  • 不是. push 不会将值添加到数组的末尾吗?
  • @2by2 他的意思是该函数返回一个数组,并使用 push 将一个元素添加到数组中,该元素是另一个数组。使用 concat 将所有值添加到原始数组
  • 正确,我知道操作想要一个包含数字的数组,而不是数字数组。我不确定这是否是他想要的;)如果他能澄清一下,我将删除我作为 Damien 的帖子,而不是似乎已经确定了。
  • 非常正确:) 我只是在解释你的意思,但老实说我认为他想推一个数组,他希望数组的相应元素将包含元素的所有因子:)
  • 我的建议是用 concat 从你的答案中删除这块 :)
猜你喜欢
  • 2023-03-23
  • 1970-01-01
  • 2018-12-18
  • 2019-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-31
相关资源
最近更新 更多