[].concat.apply([], arrayOfArrays)
这就是我将多个数组连接成一个数组(它们只是持有数字)。
不幸的是,当数组的数量太大时,我得到超出最大堆栈深度。如何连接多个数组而不是VM可以推送堆栈?
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 loop:60 ms
apply
快得多!但它仅限于堆栈大小。如何克服堆栈限制保持性能?
答案 0 :(得分:0)
假设你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);
&#13;
<pre id="out"></pre>
&#13;