Javascript For循环将初始变量设置为1的替代方案?
我制作了一个javascript,它将给出输入到数组中的所有数字的阶乘(减去数组“0”中的第一个数字,为了便于填充,我必须将该数字放在数组中以使代码正确运行)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
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;
}
}
}