javascript - 有没有办法在 JavaScript 中生成 "outsource"yield 语句?

标签 javascript function sorting generator

为了让您了解我正在尝试做什么: 作为教授排序算法的人,我想让学生能够轻松地想象他们的排序算法是如何工作的,并发现生成器对此非常有用,因为我可以随时中断执行:学生可以编写以下代码可以通过我的图书馆变成动画:

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) 来处理,那就更好了内部 yield (并且在比较的情况下也返回一个 bool 值)。所以我希望能够将以上内容表达为:

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";
}

有办法吗?

最佳答案

你可以这样做

 if(yield* compare(i-1,i))

这会将 compare 内部的 yield 调用传递到外部。

关于javascript - 有没有办法在 JavaScript 中生成 "outsource"yield 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51613282/

相关文章:

Javascript JSON 数组排序

javascript - 管理嵌套 UI Bootstrap Accordion 中的范围

sorting - 集合排序

javascript - filesaver.js 不适用于 cordova 应用程序

python - 在 Python 中,什么时候函数不需要对象前缀?

带有对象的 Javascript 纯函数示例

javascript - 如何使用对象组织 JS 函数

perl - 了解元素的顺序

javascript - 计算 knockout 渲染组件的宽度

javascript - 鼠标光标仅在特定元素上发生变化