巨大的JavaScript嵌套循环导致冻结

巨大的JavaScript嵌套循环导致冻结,javascript,Javascript,我的程序有9个嵌套for循环,以便运行我拥有的452个元素列表的每个排列,将它们分配给正确的(9个中的1个)变量 第一个for循环有67个潜在候选 第二个for循环有112个 111 147 146 145 一百 444 二十六 (a=0;a

我的程序有9个嵌套for循环,以便运行我拥有的452个元素列表的每个排列,将它们分配给正确的(9个中的1个)变量

  • 第一个for循环有67个潜在候选
  • 第二个for循环有112个
  • 111
  • 147
  • 146
  • 145
  • 一百
  • 444
  • 二十六
  • (a=0;a<67;a++)的
    {
    var1=arr[a]
    对于(b=0;b<112;b++){
    var2=arr[b]
    对于(c=0;c<111;c++){
    var3=arr[c]
    对于(d=0;d<147;d++){
    var4=arr[d]
    对于(e=0;e<146;e++){
    var5=arr[e];
    对于(f=0;f<145;f++){
    var6=arr[f];
    对于(g=0;g<100;g++){
    var7=arr[g];
    对于(h=0;h<444;h++){
    var8=arr[h];
    对于(i=0;i<26;i++){
    var9=arr[i];
    }
    }
    }
    }
    }
    }
    }
    }
    }
    
    很明显,这对我的手指和浏览器来说太多了。如何更好地处理这个问题?排列/可能结果的数量显然高得离谱

    编辑:我只是用手指做了一些数学运算,得出了一个可能的结果。我想这可能是错误的,考虑到我的手指再也不能动了,这真是令人失望


    Edit2:添加了循环,以及它是如何分配变量的,你哭了这么多次。不知道为什么代码编辑器不喜欢我的代码,所以格式不正确。不过我也不喜欢它。

    请记住JavaScript是单线程的,所以当循环执行时,其他任何东西都无法运行。根据您的环境,您可能能够利用Web Workers发挥优势。您真的需要查看所有这些数据(例如在2像素设备上渲染某些内容)吗?似乎这是一个迫切需要重构的问题。您输入的域空间太大了——正如您所发现的,整个过程总共需要10^18次迭代。在我看来,JavaScript与否,唯一相关的问题是:你能为你的潜在问题减少这个域空间吗?这不是真正的冻结,只是需要很长时间。但是,在最里面的循环体中,您实际上在计算什么呢?当然有更好的算法来解决您的问题。@CodingWithSpike在这种情况下不会有帮助。请记住JavaScript是单线程的,所以当您的循环执行时,其他任何东西都无法运行。根据您的环境,您可能能够利用Web Workers发挥优势。您真的需要查看所有这些数据(例如在2像素设备上渲染某些内容)吗?似乎这是一个迫切需要重构的问题。您输入的域空间太大了——正如您所发现的,整个过程总共需要10^18次迭代。在我看来,JavaScript与否,唯一相关的问题是:你能为你的潜在问题减少这个域空间吗?这不是真正的冻结,只是需要很长时间。但是,在最里面的循环体中,您实际上在计算什么呢?当然有更好的算法来解决你的问题。@CodingWithSpike在这种情况下不会有帮助。
    for(a = 0; a < 67; a++){
      var1 = arr[a]
    
      for(b = 0; b < 112; b++){
        var2 = arr[b]
    
        for(c = 0; c < 111; c++){
          var3 = arr[c]
    
          for(d = 0; d < 147; d++){
            var4 = arr[d]
    
            for(e = 0; e < 146; e++){
              var5 = arr[e];
    
              for(f = 0; f < 145; f++){
                var6 = arr[f];
    
                for(g = 0; g < 100; g++){
                  var7 = arr[g];
    
                  for(h = 0; h < 444; h++){
                    var8 = arr[h];
    
                    for(i = 0; i < 26; i++){
                      var9 = arr[i];
                    }
                  }
                }
              }
            }
          }
        }
      }
    }