【发布时间】:2018-05-01 05:51:46
【问题描述】:
有时我们需要在循环中使用临时数组来存储数据。例如,当我们需要处理二维数组时。但我不确定在循环中创建新数组是否是一种不好的做法,特别是如果我需要经常这样做,例如在动画中。
for (let i = 0; i < 10000; i++) {
const temp = [];
for (let j = 0; j < 10; j++) {
temp.push(j);
}
arr.push(temp);
}
如果这是一个变量,我应该能够使用全局变量并为其重新分配值。因此,我尝试使用全局数组并使用temp.length = 0 清除数组,但是由于存储了数组的引用,因此数据将全部成为最后推送的值。我也尝试了一个全局const temp = new Set(),但是当我将temp 集合推入arr 数组时,它将是arr.push([...temp])。那么在这种情况下创建新数组是不可避免的吗?
【问题讨论】:
-
@Adam 你试过吗?我没有重新分配。仔细阅读我的标题。我正在创建一个新数组。
-
好吧,如果你想要一个包含 10000 个数组的数组,那么是的,创建 10000 个数组肯定是不可避免的(最好在循环中这样做)。拥有 1000 个数组是否是一种不好的做法取决于它们应该解决的问题。
-
这是否是一个问题实际上取决于您实际在做什么,以及您是否遇到了实际的性能问题。如果你这样做了,那么你将不得不考虑重构代码以查看是否有任何替代结构,但正如@Bergi 所说 - 如果你需要一个数组数组,你需要以一种或另一种方式创建它们。跨度>
-
@JamesThorpe 是的,我同意我需要考虑的第一件事是另一种数据结构。但有时我会使用其他库,所以我必须坚持使用它们的数据结构。
-
您是否愿意为您的动画提供一个更清晰的示例(也许是一个 jsfiddle,以便我们可以看到动画,代码在实践中)?我认为 Javascript 中不会有一个通用的答案来避免创建数组或数组(然后它将成为标准)。因此,您可能只会收到针对您的具体案例的答复
标签: javascript arrays canvas html5-canvas