我无法弄清楚为什么我的循环只运行一次。 我坐在这里大约两个小时来弄清楚,但没有运气。 请帮忙
var tempSheetValues1 = currentSheet.getRange("B2:B" + lastRow).getValues();
// considering length to be 5
for (var i = 0; i < 5; i++) {
var id = tempSheetValues1.slice(i, i + 1).join('');
var url = 'https://api.demo.hitmebro/' + id + '?language=en';
Logger.log(url);
// Check if the test id exists
var response = hitApi(url, "get", null, headers, "inputId");
Logger.log(response);
var json = response.getContentText();
var data = JSON.parse(json);
var Collection = data.data.inside;
var rows = [];
data;
for (i = 0; i < Collection.length; i++) {
data = Collection[i];
var more = rows.push([data.xid]);
}
dataRange = currentSheet.getRange(2, 1, rows.length, 1);
dataRange.setValues(rows);
}
最佳答案
序言
由于对该问题的评论涉及到该问题,因此我添加了几个需要考虑的优化点,从长远来看,关注它们将使您受益。
建议
- 迁移到新的 V8 运行时以利用最新的 ES6 功能和语法:
- 利用内置的
Array
方法,如map
、reduce
、filter
等 -它提高了可读性,减少了错误潜入的可能性(因为您忘记将i
更改为j
- 正是您的情况)。 - 使用解构赋值 - 同样,它可以提高可读性,尤其是与 TypeScript(或 JSDoc)结合使用时会很有趣(+改进的类型安全性)。
- 尽可能多地使用
const
(除非您确实需要重新分配 - 然后使用let
,而不是var
),最肯定永远不要使用未声明的变量(我假设dataRange
是在代码示例之前的某个地方定义的,但以防万一......)。 - [编辑]这可能听起来违反直觉,但变量并不意味着重写,这个名称指的是它们可以容纳任何值。因此,请避免重置(例如
let data = 'some_val'; data; data = 'new_val'
) - 它会导致困惑和/或有错误的代码。相反,贴一张新的或尽量避免使用它(见下文)。
优化代码
这不是目前最好的版本,但绝对是一个开始(例如,您可以将 getRange()
移出循环,以大幅提高大型集合的执行速度,发出并发问题使用 Promise.all()
向 API 发出请求 - 感谢 V8 - 等)
const tempSheetValues1 = currentSheet.getRange("B2:B" + lastRow).getValues();
for (let i = 0; i < 5; i++) {
const id = tempSheetValues1.slice(i, i + 1).join('');
const url = `https://api.demo.hitmebro/${id}?language=en`;
Logger.log(url);
// Check if the test id exists
const response = hitApi(url, "get", null, headers, "inputId");
Logger.log(response);
const json = response.getContentText();
const parsed = JSON.parse(json);
const { data } = parsed;
const { inside } = data;
const rows = inside.map(elem => [elem.xid]);
const dataRange = currentSheet.getRange(2, 1, rows.length, 1);
dataRange.setValues(rows);
}
注释
- 希望我在重写内部循环逻辑时没有遗漏任何内容,如果有问题请随时纠正。
引用文献
关于javascript - 为什么我的循环在带有 Google Apps 脚本的 Google 表格中仅运行一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60705901/