我是 Google App Scripts 的新手。到目前为止,一切都很好。尝试做一些我以前在 MsAccess 数据库中做的事情。我想我遇到了一些问题,这可能与我拥有的大量数据有关。为了说明我的问题:
我有两个数组:
**Array1**
ID || Name <br>
0001 || Peter<br>
0005 || Arthur<br>
0008 || Gloria<br>
0010 || Martin<br>
0014 || Jess <br>
**Array2**
ID || Age <br>
0001 || 23<br>
0002 || 18<br>
0005 || 24<br>
0010 || 7<br>
如您所想,我想生成如下内容:
**Array3**
ID || Name || Age <br>
0001 || Peter || 23<br>
0005 || Arthur|| 24 <br>
0010 || Martin || 7<br>
我已将我能想到的最简单的代码用于“加入”:
for (var a=0; a<array1.length; a++) {
for (var b=0; b<array2.length; b++) {
if (array1[a][0] == array2[b][0]) {
array3.push([array1[a][0],array1[a][1],array2[b][1]); break;
}
}
}
问题是:array1 有 70,000 个条目,而 array2 大约有 10,000 个条目,这意味着代码用完了。
你们会怎么做?
最佳答案
创建一个辅助对象,其属性名称是 array2(或 array1;您可以尝试两者,看看哪个更快)的 id 值:
var a2map = {};
for (var a = 0; a < array2.length; a++)
a2map[array2[a][0]] = array2[a];
现在您可以遍历 array1 以查找匹配项:
for (var a = 0; a < array1.length; a++)
if (array1[a][0] in a2map)
array3.push([ array1[a][0], array1[a][1], a2map[array1[a][0]][1] ]);
您的原始算法的运行时间大致与 70000 * 20000
成正比,这是一个很大的数字。这个将更接近 90000
左右,使其快数千倍。
关于javascript - 谷歌应用程序脚本 : Speed up/alternative to loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47064685/