【发布时间】:2019-06-11 17:30:29
【问题描述】:
我正在尝试帮助想要在网页上显示一组随机生成的颜色的排序的学生。他有一个用随机生成的 HSL 颜色填充全局数组的函数:
function shuffle(array)
{
for(i=array.length-1;i>0;i--)
{
var random = Math.floor(Math.random() * (i+1));
var temp = array[i];
array[i] = array[random];
array[random] = temp;
}
}
还有另一个函数,它在 HTML 画布上显示一系列从左到右的数组中颜色的细垂直矩形:
function draw()
{
for(d=0;d<361;d++)
{
hue = cArray[d].slice(4,cArray[d].indexOf(",", 4));
ctx.fillStyle = `hsl(`+ hue + `,100%,50%)`;
ctx.fillRect(x,0,4,canvas.height);
x=x+3;
}
x=0; //reset x-coordinate
}
然后是一个包含冒泡排序算法的函数:
function bubbleSort(array)
{
for(i=0;i<array.length;i++)
{
for(j=1;j<array.length;j++)
{
var hue1 = array[j-1].slice(4,array[j-1].indexOf(","));
var hue2 = array[j].slice(4,array[j].indexOf(","));
if(Number(hue1) > Number(hue2))
{
var temp = array[j-1];
array[j-1] = array[j];
array[j] = temp;
// webpage hangs if function call put here
}
}
}
// webpage works if function call put here
}
如果 draw() 函数调用在嵌套循环内,则网页挂起。但如果 draw() 函数调用是在循环之后,排序完成,学生只能看到最终排序的数组。我们如何暂停循环并每隔一段时间调用draw()函数,以便排序算法显示该过程?
我查看了很多讨论论坛,它们提出了异步和递归解决方案(我只能理解一些),但它们似乎从未适用于嵌套循环。有什么想法吗?
【问题讨论】:
标签: javascript function loops nested call