循环中具有不同进程的循环的函数

Function for loops with a different process within the loop

本文关键字:循环 函数 进程      更新时间:2023-09-26

我有一个非常相似的过程,发生在很多地方,只有一个小的变化。我想知道使代码更整洁的最佳方法是什么。目前,该过程是:

var drawx = 0;
    var drawy = 0;
    while(drawy < 22){
        while(drawx < 10){
            if(nextBlock[drawx][drawy] != false){
                base[drawx][drawy] = nextBlock[drawx][drawy];
            }
            drawx++;
        }
        drawx = 0;
        drawy++;
    }

在 drawx <10 中,我通常有不同的东西要运行,我不确定如何创建一个中间有一个可变进程的函数。有没有办法做到这一点,或者我应该创建一个函数来执行此过程并根据运行函数时调用的参数执行某个 if 语句?

编辑:我想我可能还没有解决我最初的问题。我希望能够让循环中的 if 语句等进程成为可变进程,而其余部分

保持不变

JavaScript 具有一流的函数,因此您可以执行以下操作:

function drawLoop(action) {
    var drawx = 0;
    var drawy = 0;
    while(drawy < 22){
        while(drawx < 10){
            action(drawx, drawy);
            drawx++;
        }
        drawx = 0;
        drawy++;
    }
 }

然后这样称呼它:

drawLoop(function(drawx, drawy){
        if(nextBlock[drawx][drawy] != false){
            base[drawx][drawy] = nextBlock[drawx][drawy];
        }
});

当然,您可以更改传递给drawLoop的函数以满足您的需求。

您可以将函数作为变量注入到泛型函数中,例如

function genericDraw(xValidation) {
var drawx = 0;
var drawy = 0;
while(drawy < 22){
    while(xValidation(drawX)){
        if(nextBlock[drawx][drawy] != false){
            base[drawx][drawy] = nextBlock[drawx][drawy];
        }
        drawx++;
    }
    drawx = 0;
    drawy++;
}
}

其中 x验证 是

function someValidation(value) {
return (value < 10);
}

你称之为

genericDraw(someValidation);
for( var drawy = 0 ; drawy < 22 ; drawy++) {
    for( var drawx = 0 ; drawx < 10 ; drawx ++) {
        if(nextBlock[drawx][drawy] != false) {
            base[drawx][drawy] = nextBlock[drawx][drawy];            
        }
    }
}