更快地混合两个javascript列表

更快地混合两个javascript列表,javascript,Javascript,我有两个列表x_值和y_值,例如: x_values = [x1, x2, ...., xN]; y_values = [y1, y2, ...., yN]; result = [[x1, y1], [x2, y2], .... [xN, yN]] 我想创建一个列表结果,例如: x_values = [x1, x2, ...., xN]; y_values = [y1, y2, ...., yN]; result = [[x1, y1], [x2, y2], .... [xN, yN]]

我有两个列表x_值和y_值,例如:

x_values = [x1, x2, ...., xN];
y_values = [y1, y2, ...., yN];
result = [[x1, y1], [x2, y2], .... [xN, yN]]
我想创建一个列表结果,例如:

x_values = [x1, x2, ...., xN];
y_values = [y1, y2, ...., yN];
result = [[x1, y1], [x2, y2], .... [xN, yN]]
目前我正在做以下工作:

let result = [];

// Format new data
for (let j = 0; j < x_values.length; j++) {
   result.push([x_values[j], y_values[j]]);
}
let result=[];
//格式化新数据
对于(设j=0;j
这是可行的,但是当N非常高时,这个脚本非常慢(我需要每秒执行多次)

您有没有办法加快生成此列表

谢谢:)

使用映射方法:

var a = ['a1', 'a2', 'a3']
var b = ['b1', 'b2', 'b3']
var c = a.map(function(e, i) {
 return [e, b[i]];
});
如前所述

该函数的时间复杂度也是“O(n)”。 不确定是否有更快的方法。如果要在代码的后面访问2个列表中的信息,您可以保持这些列表的原样,然后根据需要直接访问索引。这会使您的列表处理更快,因为访问列表的时间复杂度将为O(1)

使用映射方法:

var a = ['a1', 'a2', 'a3']
var b = ['b1', 'b2', 'b3']
var c = a.map(function(e, i) {
 return [e, b[i]];
});
如前所述

该函数的时间复杂度也是“O(n)”。
不确定是否有更快的方法。如果要在代码的后面访问2个列表中的信息,您可以保持这些列表的原样,然后根据需要直接访问索引。这会使您的列表处理更快,因为访问列表的时间复杂性将是O(1)

您可以做的一件事是使用索引而不是推送。另一件事是首先创建具有给定长度的结果数组。这是一个基准比较

let result=新数组(x_值.length);
对于(设j=0;j

另外,
Array.forEach
Array.map
肯定比for循环慢。这是因为每次调用传递给它们的函数时,它们都会构造一个新的上下文(
This
、本地名称空间等)。JS中的函数式编程通常以牺牲性能为代价使代码更干净。

您可以做的一件事是使用索引而不是推送。另一件事是首先创建具有给定长度的结果数组。这是一个基准比较

let result=新数组(x_值.length);
对于(设j=0;j

另外,
Array.forEach
Array.map
肯定比for循环慢。这是因为每次调用传递给它们的函数时,它们都会构造一个新的上下文(
This
、本地名称空间等)。JS中的函数式编程通常以牺牲性能为代价使代码更干净。

仅供参考,这通常被称为“压缩”。您可以通过搜索来查找信息。要获得结果,您需要访问
x
中的所有值一次,以及
y
中的所有值一次。因此,最小可能的迭代次数是
N
。考虑到这一点,这已经相当优化了。除非有一种比数组的
.push()
更快的方法,但我怀疑这会严重影响您的运行时间。简单的回答是,没有比直接向上立即for循环更快的方法了,尽管您可以通过跟踪它所需的索引并直接分配(
result[pos]来加速它=…
)而不是使用推送。真正的问题是:你到底为什么要“每秒运行多次”?听起来你可能在处理数据方面做了一些非常错误的事情。仅供参考,这通常被称为“压缩”。您可以通过搜索来查找信息。要获得结果,您需要访问
x
中的所有值一次,以及
y
中的所有值一次。因此,最小可能的迭代次数是
N
。考虑到这一点,这已经相当优化了。除非有一种比数组的
.push()
更快的方法,但我怀疑这会严重影响您的运行时间。简单的回答是,没有比直接向上立即for循环更快的方法了,尽管您可以通过跟踪它所需的索引并直接分配(
result[pos]来加速它=…
)而不是使用推送。真正的问题是:你到底为什么要“每秒运行多次”?听起来你可能在处理数据方面做了一些非常错误的事情。