2010-11-17 18 views

Répondre

9

exigence intéressante. Une façon de garder l'est pour:

var start, loop_cond, inc; 
if(condition) 
{ 
    start = 0; 
    inc = 1; 
    loop_cond = function(){return x < number}; 
} 
else 
{ 
    start = number - 1; 
    inc = -1; 
    loop_cond = function(){return x >= 0}; 
} 
for(var x = start; loop_cond(); x += inc) 
{ 
    // do something 
} 

Nous configuration la valeur de départ, une fonction de la condition de terminaison, et soit un incrément positif ou négatif. Ensuite, nous appelons simplement la fonction et utilisons += pour faire l'incrément ou la décrémentation.

+0

Ah ha, une bonne solution – Josh

1

Vous voulez probablement une boucle while à la place:

var continueLooping, x; 

if(condition) 
{ 
    x = 0 
    continueLooping = (x < number); 
} 
else 
{ 
    x = number; 
    continueLooping = (x > 0); 
} 

while (continueLooping) 
{ 
    // do something 
    if(condition) 
    { 
    x++; 
    continueLooping = (x < number); 
    } 
    else 
    { 
    x--; 
    continueLooping = (x > 0); 
    } 
} 

Si vous voulez vraiment une boucle, vous devez utiliser deux d'entre eux:

function doSomething() 
{ 
    //doSomething 
} 

if(condition) 
{ 
    for(var x = 0; x<number; x++) 
    { 
    doSomething(x); 
    } 
} 
else 
{ 
    for(var x=number; x>0; x--}) 
    { 
    doSomething(x); 
    } 
} 
6

ActionScript a l'opérateur ternaire, vous pouvez donc faire quelque chose comme:

for (var x = cond ? 0 : number; cond ? x < number : x > 0; cond ? x++ : x--) { 
} 

Mais c'est assez moche. :-)

Vous pourriez également avoir besoin de/vouloir mettre quelques parens autour des morceaux de cela. Je ne suis pas sûr de la priorité de l'opérateur.

Vous pourriez également envisager d'utiliser une fonction plus élevée. Imaginez que vous avez:

function forward (count, func) { 
    for (var x = 0; x < count; x++) { 
     func(x); 
    } 
} 

function backward (count, func) { 
    for (var x = count - 1; x >= 0; x--) { 
     func(x); 
    } 
} 

Ensuite, vous pouvez faire:

(condition ? forward : backward) (number, function (x) { 
    // Your loop code goes here 
}) 
+0

j'étais sur le point de publier ce que mon troisième et pire option pour lui. Je vais vous upvote mais seulement parce que vous avez dit qu'il était moche ':-)' * Ce n'est pas une bonne solution, ne l'utilisez pas Moshe! * – Josh

+0

OK. Et votre nouvelle réponse éditée est * lisse *. J'approuve et souhaite que je pourrais encore upvote maintenant :-) – Josh

+0

Merci Mang! :-) – xscott