Javascript:循环属性内部的条件递增或递减

时间:2015-04-08 05:25:43

标签: javascript loops conditional

我知道我可以做IF ELSE,但我需要知道是否可以设置条件循环,如下所示:

for ( i=0; i<la; dr?(i++):(i--) ) {}

for ( if (dr) { i=0; i<length; i++ } else { i=length-1; i--} ) {}

4 个答案:

答案 0 :(得分:3)

另一个,仍然紧凑(更多,甚至)但更可读和有效的方法是:

var str = 'hello';
for(var i=(dr?0:str.length-1), d=(dr?1:-1); str[i]; i+=d) do_something();

如果你在dr中加1或-1,我认为这是有道理的:

for(var i=+(dr===-1&&str.length-1); str[i]; i+=dr) do_something();

答案 1 :(得分:0)

首先是好的。 (但你可能也必须在你的end_condition上使用a?b:c) 第二是:语法错误^^

疯狂的方式:

var str = 'hello';
for(i=(dr?0:str.length-1);(dr?i<str.length:i>=0);(dr?i++:i--)) do_something();

正确的方式:

   var str = 'hello';
   if(dr)
      for(i=0;i<str.length;i++) do_something();
   else
      for(i=str.length-1;i>=0;i--) do_something();

(代码未经测试)

答案 2 :(得分:0)

是的,使用条件循环是可以的,但不建议这样做,因为对于尝试理解您的代码的新用户来说,这变得非常困难。如果使用第一种语法,则代码不可读。第二种语法很可读,所以我认为你应该更喜欢使用它。

但是如果您可以使用语法的第一个版本,那么请继续使用它。您应该始终使用最容易阅读和维护的代码。

答案 3 :(得分:0)

  1. 第一个是好的和有效的。 为此:

    for ( i=0; i<4; dr?(i++):(i--) )

    检查jsFiddle here

  2. 第二个不合适,因为循环需要一个标识符,而是“if”