为了让您了解我要做什么: 作为教授排序算法的人,我希望使学生能够轻松地直观了解他们的排序算法如何工作,并发现生成器对此确实非常有用,因为我可以随时中断执行:学生可以编写以下代码可以通过我的库变成动画:
function* bubbleSort(arr){
let done = false;
while(!done){
done = true;
for(let i=1;i<arr.length;i++){
yield {type:"comparison",indexes:[i-1,i]};
if(arr[i-1]>arr[i]){
yield {type:"swap",indexes:[i-1,i]};
swap(arr,i-1,i);
done = false;
}
}
}
return "sorted";
}
这很好用,但是如果我可以编写内部处理收益的函数compare(i,j)
和swap(i,j)
(并且在比较的情况下还返回一个布尔值),那就更好了。因此,我希望能够将以上内容表达为:
function* bubbleSort(arr){
let done = false;
while(!done){
done = true;
for(let i=1;i<arr.length;i++){
if(compare(i-1,i)){
swap(arr,i-1,i);
done = false;
}
}
}
return "sorted";
}
有没有办法做到这一点?
答案 0 :(得分:1)
你可以做
if(yield* compare(i-1,i))
这会将yield
内部的compare
呼叫传递到外部。