【问题标题】:Return from a for loop but keep loop running从 for 循环返回但保持循环运行
【发布时间】:2013-05-10 01:25:21
【问题描述】:

我有一个 for 循环,每次迭代都需要返回一些东西:

for(var i=0;i<100;++i) {
    return i;
}

但是 return 打破了循环。如何返回但保持循环运行?

【问题讨论】:

  • 那么你期望它返回什么?
  • 你不能。但是,您可以做的是例如将返回值推送到数组。您能否更具体地说明您想要实现的目标?
  • 根据您的目标系统,yield 可能是一个解决方案 (so-question)。
  • Return something to where? 根据定义,一个函数只返回一个“事物”,尽管该“事物”可能是包含多个值的数组或对象。 (除非yield 适合您的情况。)

标签: javascript


【解决方案1】:

将其存储在数组中。

var array = [];
for (var i = 0; i < 100; ++i) {
    array.push(i);
}

【讨论】:

  • @Doorknob 这不是 Java。
  • 想了很多。在这种情况下我不能使用数组。
  • @MikeRifgin 那你希望它返回什么?
【解决方案2】:

这里的上下文不清楚。如果您尝试为循环的每次迭代执行一个函数,为什么不做一些简单的事情,比如从循环中调用一个函数?

for(var i=0;i<100;++i) {
    processIteration(i)
}

processIteration 中,您可以简单地使用该值处理您需要发生的事情。

【讨论】:

    【解决方案3】:

    将需要返回的值存储在一个数组中,然后在循环之后,返回该数组。

    【讨论】:

      【解决方案4】:

      有3种方法可以解决这个问题

      1. 承诺

      function loop() {
        promises = []
        for (var i = 0; i < 100; ++i) {
          // push a promise resolve to a promises array
          promises[i] = Promise.resolve(i);
        }
        return promises;
      }
      
      // Observe the promises loop
      for (let p of loop()) {
        p.then(console.log)
      }
      1. 回调

      function loop(cb) {
        for(var i = 0; i < 100; ++i) {
          // calling the callback 
          cb(i);
        }
      }
      
      // Pass a do something method
      // Here it's the console log as the callback
      loop(console.log)
      1. 产量

      // Generator function for loop over 100
      function* loop() {
        for (var i = 0; i < 100; ++i) {
            // return value from loop 
            yield i;
        }
      }
      
      // Initialize the generator function
      let it = loop();
      
      // Call and get the resulr
      // it.next().value
      var result = it.next();
      while (!result.done) {
        console.log(result.value); // 1 2 3 .... 99
        result = it.next();
      }

      【讨论】:

        猜你喜欢
        • 2019-11-23
        • 2019-07-31
        • 2018-03-19
        • 2018-09-07
        • 1970-01-01
        • 2015-12-30
        • 1970-01-01
        • 2023-03-18
        • 2021-12-17
        相关资源
        最近更新 更多