javascript - 谷歌应用程序脚本 : Speed up/alternative to loop

标签 javascript arrays performance loops

我是 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/

相关文章:

android - 禁用 Activity 中的电源按钮

iphone - 高效修改CGColor

php - 查询数据库,分解日期以获取年份,并使用唯一年份填充下拉列表

php - 使用 CakePHP 生成 Javascript View block

javascript - 使用 cookie 记住背景颜色并在从表单访问时显示它

javascript - 如何使一个 DOM 元素旁边的所有内容变暗?

javascript - 循环滚动数组

arrays - 在 Swift 中处理可选变量和数组操作的更好方法

C# int.ParseInt() 性能问题

javascript - JavaScript 中的 HTTP GET 请求?