【问题标题】:Javascript For Loop alternative to setting initial variable to 1?Javascript For Loop替代将初始变量设置为1?
【发布时间】:2026-02-17 14:00:01
【问题描述】:

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

fact = [0, 4, 2, 5, 3];
factorial = 1;
for (x = 1; x < fact.length; x++) {
for (i = 1; i <= fact[x]; i++) {
 factorial *= i;
 if (fact[x] === i) {
    console.log(fact[x] + "!" + " " + "=" + " " + factorial);
     factorial = 1;
   }
  }
 }``

console.log 这里一切正常:

4! = 24

2! = 2

5! = 120

3! = 6

我的问题是如何将变量 x 和 i 的初始值更改为 0,这样我就可以在我的数组中删除我的空间持有者“0”而不将所有内容输出为 0,因为目前如果我将变量设置为 0 以启动和删除我的数组中的空间持有者“0”等式变为:

阶乘 *= 0;

这将使一切都为零,我不希望这样!非常抱歉,我的问题措辞不佳,感谢您的帮助!

【问题讨论】:

    标签: javascript arrays loops for-loop


    【解决方案1】:

    jsFiddle Demo

    你可以用这样的while循环替换内部for循环:

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

    【讨论】:

      【解决方案2】:

      另一种方法是把你的循环倒过来:

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

      这避免了循环中0 的问题。你从数字开始,然后倒退,直到你点击1

      您还可以通过将 factorial 生成器函数从循环中拆分到数组来稍微简化一些事情:

      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(', '));
      

      编辑:

      在这里提琴:http://jsfiddle.net/ToddT/Jy5Lp/

      【讨论】:

      • 不错。您可以在下一个项目的函数库中重用阶乘
      【解决方案3】:

      我的问题是如何将变量 x 和 i 的初始值更改为 0,以便删除我的空间持有者“0”

      为什么要将i 更改为 0?它与fact 数组完全无关。你的担心是多余的。如果您删除占位符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;
          }
        }
      }
      

      【讨论】: