优化循环在谷歌应用程序脚本
Optimizing for loops in google apps script
我使用for循环搜索大型表(大约4500行)。它们大多数看起来像这样:
function lookup(value) {
var tables=SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Name");
var columnvalues = tables.getRange(1, 1,tables.getLastRow()).getValues();
var searchResult = columnvalues.findIndex(value); //Row Index - 1
}
Array.prototype.findIndex = function(search){
if(search == "") return false;
for (var i=0; i<this.length; i++)
if (this[i].toString().indexOf(search) > -1 ) return i;
return -1;
}
应用程序脚本目前运行相对较慢。我正在寻找一种方法,要么加快我当前的代码或另一种搜索方法。我一直在考虑使用谷歌电子表格查找功能(索引匹配,vLookup),但我还没有找到一种方法来访问这些功能在应用程序脚本。任何想法吗?
目前你找不到一种方法来做这个更快的应用程序脚本。您必须获得整个列并像您已经做的那样逐个搜索。
您提到的使用工作表公式的替代方法可能是不可靠的,因为您可能会发现单元格公式在更改值时不会立即更新结果。
我能看到的唯一情况是,如果你需要进行多个搜索调用,这个速度会加快。在这种情况下,将搜索项作为数组传递并在单循环中一次性搜索它们会更快。
当您搜索单个列时,一些更简单的东西可能会更快一些。
function lookup(value) {
var searchResult = false;
if(value == "") return;
var tables=SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Name");
var columnvalues = tables.getRange(1, 1,tables.getLastRow()).getValues();
for (var i=0; i<columnvalues.length; i++) {
if(columnvalues[i][0] == value) {
searchResult = i; //Row Index - 1
break;
};
}
我发现通过数组搜索的最快方法是使用数组的.filter()方法。
var yourData = range.getValues();
var results = yourData.filter(function(val) {
return val[0] == search ||
val[0].includes(search);
});
//now you have a 2d array of results
修改,使它是你想要的范围(对不起,在移动设备上),这是我发现的最快的方法。避免for循环是最好的。您还可以使用。foreach ()
相关文章:
- 使用谷歌应用程序脚本将服务器端数据表返回到客户端
- 使用谷歌应用程序脚本从工作表中获取值并将其显示在文本框中
- 需要使用谷歌应用程序脚本列出谷歌域下的所有网站
- 从应用程序脚本检查谷歌网站访问权限
- 在谷歌应用程序脚本中转换为空格的制表符
- 如何通过谷歌应用程序脚本从谷歌文档中的位置确定命名范围
- 仅为一个窗体运行应用程序脚本
- 谷歌应用程序脚本示例-如何更改单选按钮的列表框相关值
- 使用谷歌应用程序脚本制作基于谷歌电子表格的带有列表框的网络应用程序
- 应用程序脚本中导入HTML的数据擦除;谷歌表格
- JavaScript onScroll在谷歌应用程序脚本web应用程序中不起作用
- getRange(单元格)在谷歌应用程序脚本中不起作用
- 如何打开文件对象(HTML)并在谷歌应用程序脚本中解析它
- 谷歌应用程序脚本html服务和加载谷歌地图javascript api V3
- 如何使用谷歌应用程序脚本从电子邮件中提取内联文件/图像
- 谷歌应用程序脚本-onFormSubmit-复制到电子表格中的单元格
- 在谷歌应用程序脚本中,如何在满足条件的情况下只发送一次电子邮件
- 若语句出错,谷歌应用程序脚本
- 如何将数组(Google应用程序脚本)返回到HTML侧边栏
- 应用程序脚本-拆分谷歌表单复选框用逗号回答