Hail2u.net

スプレッド演算子を利用した配列同士の破壊的なマージ

配列aへ配列bを破壊的にマージしたいがletを使わずに行いたいということで、スプレッド演算子を使ってArray#push()するようなコードを書いた。同じようにletを使わずに書けるFunction#apply()を使ったマージと違ってコードが短い。また引数由来の制限(実装依存)がない。

Array#concat()を使って破壊的に配列をマージするコードは、通常、以下のように書かれる。破壊する場合は再代入するため、マージ先の配列はletを使い定義している。

let a = [0, 1, 2];
const b = [3, 4, 5];

a = a.concat(b);

スプレッド演算子とArray#push()を使うと以下のように書ける。

const a = [0, 1, 2];
const b = [3, 4, 5];

a.push(...b);

追加するだけで再代入は必要ないため、マージ先の配列をconstで定義できるわけだ。


単純な配列同士のマージだと、概ねスプレッド演算子を使ったコードの方が速いようだ。配列同士のマージを破壊的に行いたいという前提だとデメリットは特にないようだが、プロジェクトにおけるconstの扱いによっては良くない書き方とされるかもしれない。