2013-12-23 116 views
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

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

好處是,你可以完全改變邏輯,如果你需要。

+0

打我吧:) –

+0

謝謝,這個作品很棒! – Lukas

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); 
} 
+0

我討厭沒有理由的人downvote –

+2

我想你需要一個領先的';':'for(; what

+1

@FelixKling - 看來我確實,謝謝! – adeneo

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