gpt4 book ai didi

javascript - 连接的数组数量超过堆栈允许的数量

转载 作者:行者123 更新时间:2023-11-28 07:17:57 26 4
gpt4 key购买 nike

[].concat.apply([], arrayOfArrays)

这就是我将多个数组连接成一个的方法(它们只保存数字)。

不幸的是,当数组数量太大时,我得到超出最大堆栈深度。如何连接比虚拟机可以插入堆栈更多的数组?

function test (msg,f) {
console.time(msg)
f()
console.timeEnd(msg)
}

function conc (a) {
return a.concat.apply([], a)
}

function push (a) {
var R = []
for(var i = 0; i < a.length; i++){
for(var j = 0; j < a[i].length; j++){
R .push (a[i][j])
}
}
return R
}

function conc2 (a) {
var R = []
for(var i = 0; i < a.length; i++)R.push.apply(R, a[i])
return R
}

L = []
for (var i = 0; i< 10000; i++) {
var S = []
for (var j = 0; j < 70; j++) S .push (Math.round (Math.random() * 500))
L.push(S)
}

//L = [[1,2], [3,4], [5,6], [7,8], [9,0]]
var A, B, C

test('concat', function (a,b,c) {
A = conc(L)
})

test('push', function (a,b,c) {
B = push(L)
})

test('concat2', function (a,b,c) {
C = conc2(L)
})

if (A.length < 200) console.log( JSON.stringify(A), JSON.stringify(B), JSON.stringify(C))
console.log( A.length, B.length, C.length)

结果是 concat.apply:20ms,push:80ms,concat 循环:60ms

apply 速度快多了!但它受到堆栈大小的限制。如何克服堆栈限制保留性能?

最佳答案

假设您的arrayOfArrays的基本结构,那么就像这样。

var arrayOfArrays = [
[0, 1, 2],
[3, 4, 5],
[6, 7, 8]
],
result1 = [].concat.apply([], arrayOfArrays),
result2 = arrayOfArrays.reduce(function (acc, arr) {
return acc.concat(arr);
}, []);

document.getElementById('out').textContent = JSON.stringify(result1, null, 2) + '\n' +JSON.stringify(result2, null, 2);
<pre id="out"></pre>

关于javascript - 连接的数组数量超过堆栈允许的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30640234/

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