gpt4 book ai didi

javascript - 如何直接将值分配给数组,但在 OOB 异常时使用 Push 方法?

转载 作者:行者123 更新时间:2023-11-28 08:05:30 25 4
gpt4 key购买 nike

据我了解,从性能 Angular 来看,填充数组时直接赋值比 .push() 更可取。

我的代码目前如下:

for each (var e in Collection) {
do {
DB_Query().forEach(function(e){data.push([e.title,e.id])});
} while (pageToken);
}

DB_Query() 方法运行 Google 云端硬盘查询并返回一个列表。

出现我的问题是因为 DB_Query() 可以返回可变长度的列表。因此,如果我构造 data = new Array(100),直接赋值有可能超出范围。

是否有一种方法可以让我尝试捕获越界异常,以便直接为 100 个预分配索引分配值,但使用.push() 是否有任何溢出?这里的期望是 OOB 异常不会经常发生。

另外,我不确定这是否重要,但我使用以下方法在计数器变量为 >=100 后清除数组:

while(data.length > 0) {data.pop()}

最佳答案

在 Javascript 中,如果您在索引处设置的值大于数组长度,它会自动“拉伸(stretch)”数组。所以没必要为此烦恼。如果您可以很好地猜测数组大小,那就大胆猜测吧。

关于你的清除循环:这是正确的,并且似乎 pop 确实是 the fastest way 。我最初的建议是将数组 length 设置回零:data.length = 0;

现在有一个我认为确实会带来性能差异的提示:您担心的是错误的部分!

在 Apps 脚本中,需要很长时间的不是动态调整数组大小或处理数据,而是很快。问题始终与“API 调用”有关。即使用 UrlFetchSpreadsheet.Range.getValue 等。

您应该注意尽可能减少 API 调用量,在您的情况下(我现在猜测,因为我还没有看到您的完整代码)您似乎做错了。如果DB_Query成本高昂(就API调用而言),则不应将其嵌套在两个循环下。最好的解决方案通常包括事先弄清楚您需要的所有内容(如果它没有在任何地方调用,则执行您需要的尽可能多的循环),然后传递所有参数以执行批量操作并一次收集所有内容(在一个API 调用),即使它涉及获取比您需要的更多的数据。然后,掌握所有数据后,根据需要循环并转换它(这是最快的部分)。

关于javascript - 如何直接将值分配给数组,但在 OOB 异常时使用 Push 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24832174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com