Javascript - 循环嵌套循环

标签 javascript google-apps-script nested-loops

我尝试的第一个循环位于代码的/* */部分。第二个代码是 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括号之外初始化条件变量(索引)并不好,并且在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" 

将始终为 true,因为 API 永远不会返回空字符串,因此称为“null”

sessions.next_page != null 

当没有更多页面时,API 最终返回 null,因此该表达式并不总是为 true。 null 表示不存在任何对象值,“null”是包含单词 null 的字符串。

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

就这样做:

    } while ( sessions.next_page != null );

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

关于Javascript - 循环嵌套循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58823659/

相关文章:

javascript - Google Sheet 脚本中的正则表达式

google-apps-script - 自动将 Google 通讯录数据导出到 Google 表格

Python 嵌套 for 循环行为

javascript - 将 "DOM Waiter"转换为命名空间监听器?

javascript - HTML5 拖放。检测元素被抓取的位置

javascript - 当数字 13 出现但仍返回总和时,使数组求和停止

c++ - 打印与数组中的值一样多的星星

javascript - 使用 JavaScript 获取 CSS 背景图像的大小?

google-apps-script - 如果同名文件已存在,请勿保存 PDF(Google App 脚本 + Google Sheets)

java - 为什么嵌套循环不单独添加值,而是将所有值加在一起?