将 for 循环条件赋值给一个变量

3

有没有办法在Javascript的for循环中将变量分配为条件运算符?

例如,考虑以下for循环:

for(var i = 0, j = 5; i < 10; i++, j++) {
    console.log(i + ", " + j);
}

我希望能够将 i < 10 这一部分设置为一个变量。我可能想让 for 循环运行到 j < 8 而不是 i < 10。目前我使用的方法是使用一个 if 语句,然后使用两个完全相同代码但条件不同的 for 循环,我想知道是否有更高效的方法。谢谢!

4个回答

4

在for循环中使用一个函数并将其重新分配给任何你想要的东西。

var predicate = function(i, j) { return i < 10; }

for(var i = 0, j = 5; predicate(i, j); i++, j++) {
    console.log(i + ", " + j);
    if (i === 5) { // Dummy condition
        predicate = function(i, j) { return j < 8; };
    }
}

优势在于如果需要,您可以完全更改逻辑。

2
你可以用变量替换10,但你不能用变量替换运算符(<)。
不过你可以用一个函数替换整个表达式,并且这个函数可以存储在一个变量中。
var data = ["a", "b", "c"];

function loop(callback) {
    for (var i = 0; callback(i); i++) {
        console.log(data[i]);
    }
}

loop(function (i) {
    return (i < 10);
});

loop(function (i) {
    return (i < 8);
});

1
当然,你试过直接把变量放在那里吗:
var total = true==true ? 8 : 10,
    i     = 0,
    j     = 5,
    what  = true==false ? i : j;

for(; what < total; i++, j++) {
    console.log(i + ", " + j);
}

2
我认为你需要一个前导的;: for(; what < total; i++, j++) - Felix Kling

0

我猜你可以为此创建一个随机函数?

function countdown = (function(){
   var i =0, j = 5;
   return function(){
       ++i; ++j;
       return i < 10; // or j < 8
   }
})();

while(countdown()) {
    console.log('counting');
}

唯一的问题是你不能在循环的作用域中访问 ij

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接