【发布时间】:2018-08-05 07:26:04
【问题描述】:
我有一个由以下格式组成的多维数组:
var source = [['Item 1', 10],['Item 2', 15],['Item 3', 50],['Item 4', 25]];
这由两个并行数据集组成:source[x][0] 是数据,source[x][1] 是应用于每个数据项的权重。我发现自己需要将其拆分为组件数组、数据和权重。我可以(并且目前)通过以下方式执行此操作:
var weighting = [], data = [];
for (var index = 0; index < source.length; index++)
{
data.push(source[index][0]);
weighting.push(source[index][1]);
}
这导致我有以下两个数组(继续前面的示例):
var data = ['Item 1', 'Item 2', 'Item 3', 'Item 4'];
var weighting = [10, 15, 50, 25];
有没有更快的方法来做到这一点?我正在使用的源数组包含大约 200 万组数据和权重,因此与一次将这些分开一个条目的循环相比,成本更低的方法可以显着节省 CPU 时间。
【问题讨论】:
-
提示:这被称为转置一个二维数组。查找该术语可能会导致更好的解决方案
-
除了访问
source[index]一次之外,没有什么可以让这更快。您要求的操作本质上需要O(n)时间。如果您想要实际节省,您将需要优化您的整个算法。告诉我们为什么你在 JavaScript 中有这么大的数组,以及你打算用它们做什么。 -
也许这没有帮助,因为您可能无法进行更改,但为什么不首先避免创建多维数组,例如创建一个数组,其中
source[i]是一个基准,source[source.length+i]是它的权重?然后,您可以将数组分成相等的两半以获得您想要的:source.slice(0, source.length/2)和source.slice(source.length/2, source.length)
标签: javascript arrays optimization multidimensional-array