Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript中数组中的快速分组项_Javascript_Arrays - Fatal编程技术网

javascript中数组中的快速分组项

javascript中数组中的快速分组项,javascript,arrays,Javascript,Arrays,我有一个数组,它以[a,b,c,d,e,f…]的格式从API返回,其中a,c,e和b,d,f分别是相同的类型。现在我想把数组分成[[a,b],[c,d],[e,f]…]。创建一个新的数组相当容易,但是数组很大,所以速度可能会很慢 因此,我想知道是否有任何方法可以在适当的位置执行此操作?您希望将其分为两部分吗 var o = ['a', 'b', 'c', 'd', 'e', 'f'], size = 2, i, ar = []; // The new array for (i

我有一个数组,它以
[a,b,c,d,e,f…]
的格式从API返回,其中
a,c,e
b,d,f
分别是相同的类型。现在我想把数组分成
[[a,b],[c,d],[e,f]…]
。创建一个新的数组相当容易,但是数组很大,所以速度可能会很慢


因此,我想知道是否有任何方法可以在适当的位置执行此操作?

您希望将其分为两部分吗

var o    = ['a', 'b', 'c', 'd', 'e', 'f'],
    size = 2, i, ar   = []; // The new array

for (i = 0; i < o.length; i += size) ar.push(o.slice(i,i + size));
不管你怎么做,总有一些循环。编译器必须遍历所有数组元素才能生成新数组

速度测试 因此,我将使用以下内容创建一个数组:

var l = 10000000, // The length
    o = [], j;
for (j = 0; j < l; j += 1) o.push(j);

测验: 10万:0.092909533996135秒

100万:0.359059600101318秒

1000万:10.1388522232019417秒


1000万次可能会让人惊讶,但如果你有这么大的阵列,你会遇到更大的问题,比如内存问题。如果此阵列来自服务器,则可能会给服务器带来过大的压力。

这是对库的肆意使用,尽管op担心性能,但我喜欢使用lodash/下划线以获得易于理解的代码:

_.partition('a,b,c,d,e,f'.split(','), function(_, idx) {return !(idx % 2);})

一种就地解决方案是像普通方法一样迭代,构建数组,并在到达数组之前通过拼接来“跳过”元素

var arr=['a','b','c','d','e','f'];
功能紧凑型(arr){
对于(变量i=0;i//>>[“a”、“b”]、[“c”、“d”]、[“e”、“f”]]
表示是否要将它们分组为2-2个元素您测试过创建一个新数组是否慢?JS现在速度非常快,所以我不会担心微优化,除非你发现了瓶颈。在原始阵列中执行此操作可能比创建新阵列要慢。动态更改数组元素的类型可能会阻止对数组进行优化。为了提高速度,最好让给定数组中的所有元素都是相同的类型。@JulianAustralia你是对的,这可能是不成熟的优化。我只是想知道什么是最快的方法。问题是,使用一个全新的库在速度上不是很有效
var start = performance.now(),
    size = 2, ar = [];
for (i = 0; i < o.length; i += size) ar.push(o.slice(i,i + size));
console.log(performance.now() - start);
_.partition('a,b,c,d,e,f'.split(','), function(_, idx) {return !(idx % 2);})