Javascript 通过创建数组并将其相乘来分解数字

Javascript 通过创建数组并将其相乘来分解数字,javascript,arrays,Javascript,Arrays,我正在经历一个FreeCodeCamp挑战 “返回所提供整数的阶乘 如果整数用字母n表示,则阶乘是 所有小于或等于n的正整数的乘积 阶乘通常用简写符号n表示 例如:5!=1*2*3*4*5=120“ 我已经知道最简单的方法是使用递归,但是当我发现这个事实的时候,我已经在尝试通过创建一个数组来解决这个问题,在数组中输入数字并将它们相乘。但是我在这一步上被卡住了。我创建了一个数组,其位数取决于函数factorialize参数,但我无法得到这些数字的乘积。我做错了什么: function factor

我正在经历一个FreeCodeCamp挑战

“返回所提供整数的阶乘

如果整数用字母n表示,则阶乘是 所有小于或等于n的正整数的乘积

阶乘通常用简写符号n表示

例如:5!=1*2*3*4*5=120“

我已经知道最简单的方法是使用递归,但是当我发现这个事实的时候,我已经在尝试通过创建一个数组来解决这个问题,在数组中输入数字并将它们相乘。但是我在这一步上被卡住了。我创建了一个数组,其位数取决于函数factorialize参数,但我无法得到这些数字的乘积。我做错了什么:

function factorialize(num) {
  var array = [];
var product;
  for(i = 0; i<=num;i++) {
 array.push(i); 
for (j=0; j < array.length; j++) {
  product *= array[j];
}
return product;
 }
}
factorialize(5);
函数因式分解(num){
var数组=[];
var乘积;

对于(i=0;i我认为最简单的方法是创建一个范围,并减少该范围:

var n=5;
函数分解(最大值){
返回[…数组(max).keys()].reduce((a,b)=>a*(b+1),1);
}

console.log(factorize(n));
我认为最简单的方法是创建一个范围并减少它:

var n=5;
函数分解(最大值){
返回[…数组(max).keys()].reduce((a,b)=>a*(b+1),1);
}

console.log(factorize(n));
看起来您错过了一个右括号

function factorialize(num) {
  var array = [];
  var product = 1;
  for(i = 0; i<=num;i++) {
    array.push(i); 
  }                     //right here!!!    <----
  for (j=0; j < array.length; j++) {
    product *= array[j];
  }
  return product;
}

factorialize(5);
函数因式分解(num){
var数组=[];
var乘积=1;

对于(i=0;i而言,您似乎错过了一个右括号

function factorialize(num) {
  var array = [];
  var product = 1;
  for(i = 0; i<=num;i++) {
    array.push(i); 
  }                     //right here!!!    <----
  for (j=0; j < array.length; j++) {
    product *= array[j];
  }
  return product;
}

factorialize(5);
函数因式分解(num){
var数组=[];
var乘积=1;

对于(i=0;i您只需要一个循环, 从1到最大值,然后将它们相乘, 只是稍微清理一下你的代码 事实变量将包含构成总和的各个数字的字符串版本

如果m是5,那么事实上将是1*2*3*4*5

function factorialize(num) {
  var product = 1;
  var fact = ""
  for (i = 1; i <= num; i++) {
    product *= i;
    fact += i + "*"
  }
  fact = fact.substring(0, fact.length - 1)
  console.log(fact) 
  return product;
}
console.log(factorialize(5));
函数因式分解(num){
var乘积=1;
var fact=“”

对于(i=1;i您只需要一个循环, 从1到最大值,然后将它们相乘, 只是稍微清理一下你的代码 事实变量将包含构成总和的各个数字的字符串版本

如果m是5,那么事实上将是1*2*3*4*5

function factorialize(num) {
  var product = 1;
  var fact = ""
  for (i = 1; i <= num; i++) {
    product *= i;
    fact += i + "*"
  }
  fact = fact.substring(0, fact.length - 1)
  console.log(fact) 
  return product;
}
console.log(factorialize(5));
函数因式分解(num){
var乘积=1;
var fact=“”
对于(i=1;i1),您需要初始值'product'变量
2) 你应该把i=0改为1。你在循环中乘以0
3) 您不需要嵌套循环

function factorialize(num) {
  var array = [];
  var product = 1;
  for(var i = 1; i <= num; i++) {
    array.push(i); 
  }
  for (j=0; j < array.length; j++) {
    product *= array[j];
  }
  return product;
}
函数因式分解(num){
var数组=[];
var乘积=1;
对于(var i=1;i1),您需要初始值“product”变量
2) 你应该把i=0改为1。你在循环中乘以0
3) 您不需要嵌套循环

function factorialize(num) {
  var array = [];
  var product = 1;
  for(var i = 1; i <= num; i++) {
    array.push(i); 
  }
  for (j=0; j < array.length; j++) {
    product *= array[j];
  }
  return product;
}
函数因式分解(num){
var数组=[];
var乘积=1;

对于(var i=1;i您正在将
0
作为第一个元素。因此,产品自然也将是
0
。您还应该将
product
初始化为
1
。关键是函数返回NaN,甚至不是0:)检查Adam的下面以获得一个简单的解决方案。您正在将
0
作为第一个元素。因此,产品自然也将是
0
。您还应该将
产品
初始化为
1
。重点是函数返回NaN,甚至不是0:)检查Adam的下面以获得一个简单的解决方案。很抱歉,但是在哪里?额外
return product之后的右括号;
product
应该用
1
初始化。非常感谢。它现在起作用了。我有3个错误:1.第一个for循环的右括号在return product之后,而不是在数组之后。push(I).2.我将0作为第一个元素,因此产品始终为0。将I=0更改为I=1-修复了问题。3.我没有将产品初始化为1。很抱歉,但是在哪里?返回产品后的额外右括号;
产品应使用
1
初始化。非常感谢。它现在起作用了。我有3个错误:1.T第一个for循环的右括号位于返回的乘积之后,而不是数组之后。push(i)。2.我将0作为第一个元素,因此乘积始终为0。将i=0更改为i=1-修复了该问题。3.我没有将乘积初始化为1。