我试图在 React 中创建一个排序算法可视化工具。 此功能正在运行,但我想减慢 for 循环的速度,以便每 400 毫秒设置一次状态。

bubbleSort = (arr) => {
        console.log('bubblesort is running');
        var len = arr.length;
        console.log('array length: ', len);
        console.log(arr);

        for (var i = len-1; i>=0; i--){
                 console.log("i: ", i); 
                 for(var j = 1; j<=i; j++){
                     console.log("j: ", j);
                     if(arr[j-1]>arr[j]){
                        var temp = arr[j-1];
                        arr[j-1] = arr[j];
                        arr[j] = temp;
                        console.log("current array: ", arr);
                        this.setState({
                            array: arr
                        })
                     }
                 }
            } 
            console.log("final array: ", arr)
            return arr
     }

#1楼 票数:5

最简单的方法是使用async / await范式。

创建一个实现延迟的函数(通过返回一个超时后解决的承诺):

const delay = (ms) => new Promise((resolve, reject) => setTimeout(resolve, ms));

然后将您的函数转换为async函数:

bubbleSort = async (arr) => {

最后,将延迟调用放入您的循环中:

await delay(400);

编辑:根据评论,使用setTimeout意味着函数无法直接返回结果,因为在函数退出时结果将不可用。 如果你只关心可视化排序,上面的就足够了。 如果你真的想要排序的数组,你将不得不等待你的bubbleSort函数(或链接它返回的承诺):

// needs to be inside `async` function
let sortedArray = await bubbleSort(array);

或者

// the result needs to be used in callback
bubbleSort(array).then(sortedArray => ... );

  ask by William translate from so

未解决问题?本站智能推荐:

1回复

为什么我的冒泡排序不排序重复项而只触发一次?

我正在 React 中构建一个排序可视化器,但遇到了一个小错误。 我正在使用冒泡排序对随机生成的数字列表进行排序,条形的高度表示它们的数值(最大 600)。 我希望它对整个列表进行排序,但它只会在 onClick() 一次移动最大的项目......不仅如此,但在涉及重复值时我遇到了麻烦。 重复项通常
2回复

为什么第一个for循环递减?

当我试图理解冒泡排序的概念时,我偶然发现了这段让我感到困惑的代码。 为什么第一个 foo 循环递减? 为什么不是for (int i=0; i<len; i++) {} ?
2回复

对此嵌套的for循环感到困惑

为什么要在循环中打印/排序所有10个整数。 它以i = N-1(大于或等于0)开始,因此继续进行下一个for循环。 这里J为1,小于或等于i,因此进行编译。 我遇到的问题是,第一次迭代将是i = 9且j = 1、8和2、7和3、6和4、5和5,最后是4和6(停止点), 其中j不小于或
2回复

每次进行冒泡排序时,如何每次打印列表状态?

我有一个关于如何在python 2.7中获得以下输出的问题。 功能的输入如下。 字符串列表(L)和布尔值,表示升序字母顺序(asc = True)或降序字母顺序(asc = False)。 在这两种情况下,它都是按字典顺序排列的。 我想在每次通过时打印出列表的状态。 另外,我可以将
1回复

冒泡排序功能后跳过for循环

我正在为最终作业制定一个分类程序。 它获取帐户的帐号、姓氏和余额,并根据帐号按升序对其进行排序。 我的程序遇到的问题是,一旦它进入 for 循环输出信息,它就会完全跳过它。 我相信这可能与我的冒泡排序功能有关,但我不确定如何解决它。 我们没有学过快速排序,所以我没有使用它。 我收到一个错误:'sor
2回复

在冒泡排序中使用第二个for循环[关闭]

有人可以在下面的冒泡排序中解释第二个for循环的确切目的吗? 我理解第一个循环正在查看数组的第i个整数,但究竟第二个循环看到了什么? 请原谅我对这个话题的无知。 我已经编写了不到一周的编码,并且对这个问题感到有些困惑。
1回复

如何使用扫描仪使用2for循环进行选择排序?阅读详情

这就是我做泡沫排序的方式 我也发现了许多进行选择排序的方法,但那时我不明白。 有人可以用类似的语法,代码和扫描程序在气泡排序和选择排序中发布更改。
1回复

为什么我的for循环包含一个提取API调用仅运行一次?

我有一个循环来验证最多5个ids如果它们确实存在)。 我有一个for循环,该循环遍历ids ,调用端点进行检查,并对结果进行某些功能。 我遇到的问题是循环只运行了一次,然后似乎从函数中退出了。 我的功能如下: