JavaScriptで配列を結合したいと思いました。配列の個数は分からず、任意の場合です。
var x = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [], [10]];
を、
var xx = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
に変換したいということです。 SchemeだとSRFI-1にconcatenateというのがあるのですが、JavaScriptはどうするとよいのかと思って調べました。
結論から言うと、
var xx = [].concat.apply([], x);
がよさそうです。
jsperfにベンチマークがありました。
http://jsperf.com/multi-array-concat/9
Safariでは別の書き方(push.applyをループする)の方がよいケースもあるようですが、コーディングの長さも考えると、上記の書き方がベストでしょう。
ついでに、結合する配列が2個に限定される場合のベンチマークも見つけました。
http://jsperf.com/concatperftest/13
この場合は、Array.concatを使うより、Array.push.applyを使うほうがよさそうです。
コメント