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一个有限的递归世界,而不是我们赖以生存的无限资本扩张,即所谓的资本主义,它正在破坏我们的环境。
我尝试的第一个循环是在 /* */ 部分代码中。第二个代码是 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一个有限的递归世界,而不是我们赖以生存的无限资本扩张,即所谓的资本主义,它正在破坏我们的环境。