Javascript - 循环嵌套循环

Javascript - Looping a nested Loop

我尝试的第一个循环是在 /* */ 部分代码中。第二个代码是 do while 循环。在这两种情况下,循环只是继续而不是重复嵌套循环。我不太确定我做错了什么。 while 条件可能不正确,但我担心的是内部循环的非重置。索引似乎没有重置为 0。

我正在使用 Google Apps 脚本

function getWorkingSessions() {
  var api_token = "************************";
  var range_start = "2019-09-01";
  var range_end = "2019-09-02";
  var company = "*****";
  var range = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Daten Papershift")
  var row = range.getLastRow()+1;
  var pageget = 1

  var options = {
    'method' : 'get',
    'contentType': 'application/json',
  };

  /* var result = UrlFetchApp.fetch("https://app.papershift.com/public_api/v1/working_sessions?api_token=" + api_token + "&range_start=" + range_start + "&range_end=" + range_end + "&page=" + pageget + "&company_id=" + company);
  if (result.getResponseCode() == 200) {
    var session = JSON.parse(result.getContentText());
    var params = session.working_sessions;

   /* for (; page < 3; page++) {
      var resultb = UrlFetchApp.fetch("https://app.papershift.com/public_api/v1/working_sessions?api_token=" + api_token + "&range_start=" + range_start + "&range_end=" + range_end + "&page=" + page + "&company_id=" + company);
      var sessions = JSON.parse(resultb.getContentText());
      var workingsessions = sessions.working_sessions;
      var index = 0;

      for (; index < workingsessions.length -1; index++ , row++) {
        range.getRange(row, 1, 1, 1).setValue(workingsessions[index].id);
        var datum = Utilities.formatDate(new Date(workingsessions[index].starts_at), "GMT", "dd.MM.yyyy");
        range.getRange(row, 2, 1, 1).setValue(datum)
        var start = Utilities.formatDate(new Date(workingsessions[index].starts_at), "GMT", "HH:mm");
        range.getRange(row, 3, 1, 1).setValue(start);
        var end = Utilities.formatDate(new Date(workingsessions[index].ends_at), "GMT", "HH:mm");
        range.getRange(row, 4, 1, 1).setValue(end);
        range.getRange(row, 5, 1, 1).setValue(workingsessions[index].location_id);
        range.getRange(row, 6, 1, 1).setValue(workingsessions[index].employee_id);
      };
    }; */
    var page = 1;

    do {
      var resultb = UrlFetchApp.fetch("https://app.papershift.com/public_api/v1/working_sessions?api_token=" + api_token + "&range_start=" + range_start + "&range_end=" + range_end + "&page=" + page + "&company_id=" + company);
      var sessions = JSON.parse(resultb.getContentText());
      var workingsessions = sessions.working_sessions;
      var index = 0;
      for (; index < workingsessions.length-1; index++, row++) {
        range.getRange(row, 1, 1, 1).setValue(workingsessions[index].id);
        var datum = Utilities.formatDate(new Date(workingsessions[index].starts_at), "GMT+2", "dd.MM.yyyy");
        range.getRange(row, 2, 1, 1).setValue(datum)
        var start = Utilities.formatDate(new Date(workingsessions[index].starts_at), "GMT+2", "HH:mm");
        range.getRange(row, 3, 1, 1).setValue(start);
        var end = Utilities.formatDate(new Date(workingsessions[index].ends_at), "GMT+2", "HH:mm");
        range.getRange(row, 4, 1, 1).setValue(end);
        range.getRange(row, 5, 1, 1).setValue(workingsessions[index].location_id);
        range.getRange(row, 6, 1, 1).setValue(workingsessions[index].employee_id);
      };
      page++;
    } while ( sessions.next_page != "null" );

 /* } else {}; */
};

索引确实变为0,虽然我理解你的疑虑,因为在for括号之外初始化条件变量(索引)不好,而且操作除条件变量之外的其他变量也不好因为,你可以做到,它适用于 javascript,但它并不好。

这按预期工作,因此您的索引肯定会变为 0。

function getWorkingSessions() {

  var row = 1;

    do {
      var index = 0;
      for (; index < 6; index++, row++) {
        Logger.log(row);
        Logger.log(index);        

      };
    } while ( row<5 );

 /* } else {}; */
};

问题出在while条件上:

sessions.next_page != "null" 

将始终为真,因为 API 永远不会 return 为空字符串,因此称为 "null"

sessions.next_page != null 

最终 API return 为空,当没有更多页面时,所以这个表达式不会总是正确的。 null 是没有任何对象值,"null" 是一个包含单词 null 的字符串。

所以,问题是应用程序脚本环境正在进入一个永无止境的循环,因此,看起来它没有进入你的嵌套 for,但这是因为你的代码正在进入一个永无止境的循环并使环境崩溃。

就做:

    } while ( sessions.next_page != null );

你应该return一个有限的递归世界,而不是我们赖以生存的无限资本扩张,即所谓的资本主义,它正在破坏我们的环境。