【发布时间】:2020-11-17 08:44:09
【问题描述】:
我创建了一个 for 循环,它从数组 (salesLog) 中提取列中的销售数据并将它们放入工作表 (targetSheet)。销售数据保存在多列中。 columnStart 和 columnEnd 之间的列被添加(单位),与源工作表中的正确行匹配,并放置在 targetSheet 中的正确行中。这个循环工作得很好,只是它太慢了,而且担心更多的数据无法扩展。我正在寻找一种更快地运行此循环的方法。有什么帮助吗?
var length = POlistTarget.length;
for (var i=0; i <= length; i++){
//find Row
var row = POlistSource.indexOf(POlistTarget[i]);
//findColumns
var columnStart = periodArr[0]+1
var columnEnd = periodArr.length
var unitArr =
salesLog.getRange(row+3,columnStart,1,columnEnd).getValues().flat().filter(row=>row!="");
//add units in an array
var unit = unitArr.reduce(function(a,b){return a+b;},0);
//execute
targetSheet.getRange(i+4,7,1,1).setValue(unit);
}
【问题讨论】:
-
我认为您的脚本不完整。所以,虽然这是我从你的脚本中猜到的,但如果你在循环中使用
getValues()和setValue。在这种情况下,处理成本会很高。修改它们怎么样?如果我的理解是正确的,Best Practices 和 stackoverflow.com/tags/google-apps-script/info 可能会有用。如果我误解了你的剧本,我深表歉意。 -
一种方法是跳过
filter,直接使用reduce。 -
This loop works fine怎么样?你有一个else声明,那里没有if声明。请提供完整代码。 -
对不起。我在循环中有一个 if 语句对于这个问题的概念并不重要,并且忘记删除它后面的 else 语句。谢谢!我已经相应地编辑了代码。
标签: javascript arrays for-loop google-apps-script google-sheets