ここでは、concat() と似た動きをする push()/slice()/スプレッド演算子(...) の違いと使い分けを、初心者向けにわかりやすく解説します。
配列を結合・コピーする主な方法の比較
| メソッド | 主な用途 | 元の配列は変わる? | 新しい配列を返す? | 書き方の例 |
|---|
| concat() | 配列を結合・コピー | ❌変わらない | ✅返す | arr.concat(arr2) |
| push() | 配列の末尾に要素を追加 | ✅変わる | ❌返さない(新しい配列は作らない) | arr.push('新要素') |
| slice() | 配列の一部をコピー or 全体コピー | ❌変わらない | ✅返す | arr.slice() or arr.slice(1,3) |
| スプレッド演算子 (…) | 配列を展開してコピーや結合 | ❌変わらない | ✅返す | [...arr, ...arr2] |
各メソッドの使い方と特徴をわかりやすく解説!
① concat():配列を結合・コピー(元を変えない)
let a = [1, 2];
let b = [3, 4];
let c = a.concat(b);
console.log(c); // [1, 2, 3, 4]
console.log(a); // [1, 2] ← 元はそのまま
JavaScript
- 新しい配列を作るので、安全に使える。
- 元のデータを保ちつつ「新しい一覧を作る」ときに最適。
② push():配列に要素を追加(元が変わる)
let a = [1, 2];
a.push(3, 4);
console.log(a); // [1, 2, 3, 4] ← 元の配列が変わる!
JavaScript
- 新しい配列は作らず、元を直接変更する。
- 「データをどんどん追加したい」ようなときに使う。
- 一時的に結合するだけなら不向き。
③ slice():配列の一部 or 全体をコピー
let a = [1, 2, 3, 4];
let part = a.slice(1, 3); // インデックス1〜2をコピー
console.log(part); // [2, 3]
let copy = a.slice(); // 全体コピー
console.log(copy); // [1, 2, 3, 4]
JavaScript
concat() と同じく元の配列を変更しない。
- ただし結合はできず、「切り出し or コピー」専用。
④ スプレッド演算子(...):モダンで柔軟!
let a = [1, 2];
let b = [3, 4];
let c = [...a, ...b];
console.log(c); // [1, 2, 3, 4]
let copy = [...a];
console.log(copy); // [1, 2]
JavaScript
concat() と同じように新しい配列を作るが、記述が短くて見やすい!
- ほぼ「concat のモダン版」。
- 中にオブジェクトや配列がある場合は、
concat() 同様「浅いコピー」。
使い分けの目安
| 状況 | おすすめの方法 | 理由 |
|---|
| 元の配列を壊したくない | concat() / slice() / ... | 元を変更しないから安全 |
| 元の配列に直接追加したい | push() | 一番シンプルに末尾追加できる |
| 配列をコピーしたい | concat() / slice() / ... | 全体を簡単にコピー可能 |
| 複数の配列をまとめたい | concat() / ... | どちらも複数結合OK |
| 直感的・モダンに書きたい | ...(スプレッド演算子) | 見た目がスッキリ&ES6以降の主流 |
まとめ:これを覚えよう!
| 目的 | メソッド | 例 |
|---|
| 元を壊さず結合したい | concat() | a.concat(b) |
| 元を壊して追加したい | push() | a.push(x) |
| 全体コピー | slice() or concat() or [...a] | a.slice() / a.concat() / [...a] |
| モダンな結合・コピー | ... | [...a, ...b] |