JavaScript -是否可以将可变长度的if-else语句转换为for循环?

tf7tbtn2  于 2023-05-21  发布在  Java
关注(0)|答案(3)|浏览(113)

我有下面的代码,其中包括不同数量(nk)的if-else条件。

var n = 128; // n is 128 or greater.
var nk = 4; // nk is varying, can be 4,6,8,12,16 etc. smaller than n.

for (let i = 1; i <= n; i++) {
    if ((i < 1 * n / nk) { ... }
    else if (i < 2 * n / nk) { ... }
    else if (i < 3 * n / nk) { ... }
    else if (i < 4 * n / nk) { ... }
}

有没有可能把if-else语句变成一个for循环(或其他任何东西),这样它就可以处理不同的nk?现在,为了解释不同的nk值,我必须用if-else语句编写多个for循环。
我尝试了以下方法,但显然不起作用:

for (let i = 1; i < nk; i++) {
    if (x < i * n / nk)) { /* code here is a function of i */ }
}
2w2cym1i

2w2cym1i1#

按照@tevemadar的评论中的指示计算i的值,然后执行i的函数

const i = Math.floor(x/(n*nk));
myFunctionOfI(i);
inb24sb2

inb24sb22#

是的,可以将可变长度的if-else语句转换为for循环。但是,您需要修改循环条件和if条件,以适应变化的nk值

var x, n; // defined before
var nk = 4;

for (let i = 0; i < nk; i++) {
    if (i === nk - 1 || x < (i + 1) * n / nk) {
        // Code here is a function of i
        break;
    }
}
ukdjmx9f

ukdjmx9f3#

经过进一步的试验和错误,我得到了以下解决方案,它可以根据我的需要工作。关键是在if内部使用闭区间校验;使用break以获得更好的性能:

n = 128;
var nk = 4;

for (let i = 1; i <= n; i++) {
    let nkk = n / nk;

    for (let k = 0; k < nk; k++) {
        if (i > k * nkk && i <= (k + 1) * nkk) {
            // ...
            break;
        }
    }
}

很抱歉没有正确地表达我的问题,这个问题可能会被关闭或保留,如果答案可能对未来的任何人有用。

相关问题