配列の結合
Concatenate array
配列自体の結合
基本的には、2種類の結合方法がある。
[a1, a2, a3, ...]と[b1, b2, b3, ...]がある時
[a1, a2, a3, ..., b1, b2, b3, ...] とする方法(一般的な配列の結合)
[[a1, b1], [a2, b2], [a3, b3], ...] とする方法
PHP の array_combine に近い
JavaScript
Array.prototype.push.apply を使うと、元の配列に配列を結合できる。(破壊的操作)
a.push.apply(a, b)
Array.prototype.push.apply(a, b)
内部的に引数として展開される。
a.push(...b)
引数として展開される。
a.splice(a.length, 0, ...b);
内部的に引数として展開される。
スプレッドされる要素の個数が少ないならアリかも。
for-of で地道に push する。
code:js
for (v of b) {
a.push(v);
}
Array.prototype.concat は、新しい配列が生成される。
r = a.concat(b);
どれがよいのか?
パフォーマンス的には、オブジェクトを新たに作らない Array.prototype.push.apply の方がよい(?)
引数渡ししているのでそこで大きくパフォーマンスが落ちる模様
push.apply やスプレッド構文だと引数として展開してしまうため、引数の個数の限界を超えるとエラーになる。
件数が多い場合は for-of か concat しか方法がない。
concat の方が速い
イミュータブルであるべき場合には、Array.prototype.concat を使うしかない。
何度も足し合わせるなら、配列ごと push してから flat した方がよさそう。
参考
Java
ArrayList
addAll (破壊的操作)
Keyword
配列の連結