1 javascript for-loop bubble-sort reactjs
我试图在 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
}
Run Code Online (Sandbox Code Playgroud)
最简单的方法是使用async/await范式。
创建一个实现延迟的函数(通过返回一个超时后解决的承诺):
const delay = (ms) => new Promise((resolve, reject) => setTimeout(resolve, ms));
Run Code Online (Sandbox Code Playgroud)
然后将您的功能转换为 async函数:
bubbleSort = async (arr) => {
Run Code Online (Sandbox Code Playgroud)
最后,将延迟调用放入您的循环中:
await delay(400);
Run Code Online (Sandbox Code Playgroud)
编辑:根据评论,使用setTimeout意味着函数不可能直接返回结果,因为在函数退出时结果将不可用。如果你只关心可视化排序,上面的就足够了。如果你真的想要排序的数组,你将不得不等待你的bubbleSort函数(或链接它返回的承诺):
// needs to be inside `async` function
let sortedArray = await bubbleSort(array);
Run Code Online (Sandbox Code Playgroud)
或者
// the result needs to be used in callback
bubbleSort(array).then(sortedArray => ... );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
151 次 |
| 最近记录: |