Javascript For循环将初始变量设置为1的替代方案?

Javascript For循环将初始变量设置为1的替代方案?,javascript,arrays,loops,for-loop,Javascript,Arrays,Loops,For Loop,我制作了一个javascript,它将给出输入到数组中的所有数字的阶乘(减去数组“0”中的第一个数字,为了便于填充,我必须将该数字放在数组中以使代码正确运行) fact=[0,4,2,5,3]; 阶乘=1; 对于(x=1;x

我制作了一个javascript,它将给出输入到数组中的所有数字的阶乘(减去数组“0”中的第一个数字,为了便于填充,我必须将该数字放在数组中以使代码正确运行)

fact=[0,4,2,5,3];
阶乘=1;
对于(x=1;x

您可以将内部for循环替换为while循环,如下所示:

var fact = [4, 2, 5, 3];
for (x = 0; x < fact.length; x++) {
 var factorial = fact[x];
 var result = 1;
 while( factorial > 0 ){
  result *= factorial--;        
 }
 console.log(fact[x] + "!" + " " + "=" + " " + result);
}
var-fact=[4,2,5,3];
对于(x=0;x0){
结果*=阶乘--;
}
console.log(事实[x]+“!”+“+”=“+”+结果);
}

另一种方法是将循环反向:

for (i = n; i > 0; i--) {
    fact *= i;
}
这避免了循环中出现
0
的问题。从数字开始,然后向后走,直到点击
1

您还可以通过将
阶乘
生成器函数从数组的循环中分离出来,从而简化一些事情:

function each (a, f) {
    var i = 0,
        r = [];

    for (i = 0; i < a.length; i++) {
        r.push(f(a[i]));
    }

    return r;
}

function factorial (n) {
    var i = 0,
        fact = 1;

    for (i = n; i > 0; i--) {
        fact *= i;
    }

    return fact;
}

var factorials = each([4, 2, 5, 3], factorial);

console.log(factorials.join(', '));
每个函数(a,f){
var i=0,
r=[];
对于(i=0;i0;i--){
事实*=i;
}
返回事实;
}
var阶乘=每个([4,2,5,3],阶乘);
log(factorials.join(',');
编辑:

在这里拉小提琴:

我的问题是如何将变量x和I的初始值更改为0,以便删除空格保持器“0”

为什么要将
i
更改为0?这与
事实
数组无关。您的担心放错地方了。如果删除占位符
0
,您的代码应该可以正常工作:

fact = [4, 2, 5, 3];
factorial = 1;
for (x = 0; x < fact.length; x++) {
  for (i = 1; i <= fact[x]; i++) {
    factorial *= i;
    if (fact[x] === i) {
      console.log(fact[x] + "!" + " " + "=" + " " + factorial);
      factorial = 1;
    }
  }
}
fact=[4,2,5,3];
阶乘=1;
对于(x=0;x对于(i=1;i Nice),您可以在下一个项目的函数库中重用factorial
fact = [4, 2, 5, 3];
factorial = 1;
for (x = 0; x < fact.length; x++) {
  for (i = 1; i <= fact[x]; i++) {
    factorial *= i;
    if (fact[x] === i) {
      console.log(fact[x] + "!" + " " + "=" + " " + factorial);
      factorial = 1;
    }
  }
}