【问题标题】:Use conditional statement to choose between different for loops in Javascript使用条件语句在 Javascript 中的不同 for 循环之间进行选择
【发布时间】:2019-03-13 08:42:59
【问题描述】:

根据特定条件,我希望执行两个不同的 for 循环之一。因此,在下面的示例中,我希望 console.log 如果 a > b 返回降序数字,如果 b > a 返回升序数字。我一点也不惊讶这不起作用,但它让你知道我在追求什么。

for (if (a > b) {(i = 2; i > 0; i--)} else {(i = 0; i < 2; i++)} {
console.log(i);
};

显然,我可以通过 if-else 在两个完整且独立的循环之间进行选择来解决此问题,每个循环都有自己的 console.log(i) 代码块,但在我处理的情况下,这将涉及复制一个巨大的代码量。

【问题讨论】:

  • 什么代码会被复制一堆?循环体?如果是这样,请将其提取到单独的函数中。
  • 你想达到什么目的?发布一些示例输入和预期输出。我认为您正在过度设计,任务很简单,即使用iffor 获取升序和降序数字

标签: javascript for-loop if-statement


【解决方案1】:
 for(let i = a > b ? 2 : 0 ; a > b ? i > 0 : i < 2; a > b ? i-- : i++)
   console.log(i);

您必须将条件移动到每个表达式中。或者在它自己的函数中移动身体:

 function body(i) {
   console.log(i);
 }

 if (a > b) {
   for(i = 2; i > 0; i--) body(i);
 } else {
   for(i = 0; i < 2; i++) body(i);
}

或功能方式:

 const maybe = (condition, op) => arg => condition ? op(arg) : arg;
 const range = (start, end) => Array.from({ length: end - start }, (_, i) => start + i);

maybe(a > b, it => it.reverse())(range(0, 2)).forEach(console.log);

【讨论】:

    【解决方案2】:

    您可以将循环体放入一个函数中,并在两个循环的每次迭代中调用该函数。另请注意,for 循环 } 结束括号末尾不应有分号:

    const a = 4;
    const b = 5;
    
    if (a > b) {
      for (let i = 2; i > 0; i--) {
        loop(i);
      }
    } else {
      for (i = 0; i < 2; i++) {
        loop(i);
      }
    }
    function loop(i) {
      console.log(i);
    }

    【讨论】:

      【解决方案3】:

      jsfiddle

      function choose(a, b) {
        if (a > b) {
          for (let i = 2; i >= 0; i--) {
            console.log(i);
          }
        } else {
          for (let i = 0; i <= 2; i++) {
            console.log(i);
          }
        }
      }
      
      choose(2, 4);

      【讨论】:

        【解决方案4】:

        我会这样转:先做 if 语句,然后 for 循环。

        if(a > b){
          for(let i = 2; i > 0; i--) console.log(i)
        } else {
          for(let i = 0; i < 2; i++) console.log(i)
        }
        

        【讨论】:

          【解决方案5】:

          只需尝试将其包装在这样的函数中:

          function loop(a, b) {
            if (a > b) {
              for (i = 2; i > 0; i--) {
                console.log(i);
              }
            } else {
              for (i = 0; i < 2; i++) {
                console.log(i);
              }
            }
          
          }
          
          
          loop(5,4);
          loop(4,5);

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-07-10
            • 1970-01-01
            • 2021-03-20
            • 2011-09-10
            • 1970-01-01
            相关资源
            最近更新 更多