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