この記事ではJavaScriptの配列を結合するメソッド『concatメソッド』について、以下の内容をサンプルコードを用いて分かりやすく説明するように心掛けています。ご参考になれば幸いです。
concat
メソッドとはconcat
メソッドの構文concat
メソッドの使い方- 配列を結合する
- 複数の配列を結合する
- 配列と値を結合する
- 複数の文字列を結合する
- 配列を完全コピーする
concat
メソッドの特徴- オリジナルの配列は変更しない
- ネストされた配列をフラットにしない
Symbol.isConcatSpreadable
が真値の時はオブジェクトを配列として扱う- 元の配列のいずれかが疎配列の場合、結果の配列も疎配列になる
concatメソッドとは
concat
メソッドは、元の配列に新しい配列や値を追加して新しい配列を作成するメソッドです。なお、concat
メソッドは元の配列は変更せず、結合された新しい配列を返します。
後ほどconcat
メソッドの構文や使い方について詳しく説明しますが、まず以下に示す簡単なサンプルコードを見てみましょう。
const array1 = [1, 2, 3];
const array2 = [4, 5, 6];
const result = array1.concat(array2);
console.log(result); // [1, 2, 3, 4, 5, 6]
console.log(array1); // [1, 2, 3] ← 元の配列は変更しない!!
このサンプルコードでは、array1
とarray2
を結合して新しい配列result
を作成しています。なお、元の配列array1
は変更されません。
concatメソッドの構文
concat
メソッドの構文を以下に示します。
concatメソッドの構文
array.concat(value1[, value2[, ...[, valueN]]])
array
は元の配列です。concat
メソッドの引数と返り値を以下に示します。
引数
value1, value2, …, valueN
- 結合する配列や値です。
返り値(戻り値)
concat
メソッドは結合された新しい配列を返します。
concatメソッドの使い方
concat
メソッドについて、以下に示している使い方をこれから説明します。
- 配列を結合する
- 複数の配列を結合する
- 配列と値を結合する
- 複数の文字列を結合する
- 配列を完全コピーする
上記の使い方について順番に説明します。
配列を結合する
concat
メソッドを使うと、元の配列に他の配列を結合することができます。
以下のサンプルコードでは、配列array1
と配列array2
を結合して新しい配列result
を作成しています。
const array1 = [1, 2, 3];
const array2 = [4, 5, 6];
const result = array1.concat(array2);
console.log(result); // [1, 2, 3, 4, 5, 6]
複数の配列を結合する
concat
メソッドは、複数の配列を一度に結合することもできます。
以下のサンプルコードでは、配列array1
、配列array2
、配列array3
を一度に結合して新しい配列result
を作成しています。
const array1 = [1, 2, 3];
const array2 = [4, 5, 6];
const array3 = [7, 8, 9];
const result = array1.concat(array2, array3);
console.log(result); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
配列と値を結合する
concat
メソッドは、元の配列に値を結合することもできます。
以下のサンプルコードでは、配列array
に値4, 5, 6
を追加して新しい配列result
を作成しています。
const array = [1, 2, 3];
const result = array.concat(4, 5, 6);
console.log(result); // [1, 2, 3, 4, 5, 6]
複数の文字列を結合する
concat
メソッドは一般的な文字列を複数結合することも可能です。
以下のサンプルコードでは、str1
とstr2
を結合して、新しい文字列result
を作成しています。result
には、'Hello World!'
が出力されます。
const str1 = 'Hello';
const str2 = 'World';
const result = str1.concat(' ', str2, '!');
console.log(result); // Hello World!
配列を完全コピーする
配列をコピーするとき、concat
メソッドを使用することで問題を簡単に解決できます。concat
メソッドは引数が省略された場合、concat
メソッドは呼び出された元の配列のシャローコピーを返します。
以下のサンプルコードでは、array1
をconcat
メソッドを使ってarray2
にコピーしています。array2
に値を追加しても、array1
は変更されず、新しい配列array2
にのみ変更が反映されていることが分かります。
const array1 = [1, 2, 3, 4, 5];
const array2 = array1.concat();
array2.push(6);
console.log(array1); // [1, 2, 3, 4, 5]
console.log(array2); // [1, 2, 3, 4, 5, 6]
以下のサンプルコードではarray2
に値を追加した場合、array1
も変更されてしまうので注意してください。これは、JavaScriptでは配列が「参照渡し」されるからです。
const array1 = [1, 2, 3, 4, 5];
const array2 = array1;
array2.push(6);
console.log(array1); // [1, 2, 3, 4, 5, 6]
console.log(array2); // [1, 2, 3, 4, 5, 6]
concatメソッドの特徴
concat
メソッドの特徴を以下に示します。
- オリジナルの配列は変更しない
- ネストされた配列をフラットにしない
Symbol.isConcatSpreadable
が真値の時はオブジェクトを配列として扱う- 元の配列のいずれかが疎配列の場合、結果の配列も疎配列になる
各特長について順番に説明します。
オリジナルの配列は変更しない
concat
メソッドは元の配列を変更しません。新しい配列が返されるため、元の配列はそのままです。
以下のサンプルコードから分かるように。配列array
は変更されず、新しい配列result
が返されます。
const array = [1, 2, 3];
const result = array.concat([4, 5, 6]);
console.log(array); // [1, 2, 3]
console.log(result); // [1, 2, 3, 4, 5, 6]
ネストされた配列をフラットにしない
concatメソッドはネストされた配列をフラットにしません。ネストされた配列はそのまま結合されます。
以下のサンプルコードでは、配列array1
と配列array2
を結合して新しい配列result
を作成していますが、配列array2
のネストされた配列[4, 5]
がそのまま結合されています。
const array1 = [1, 2, 3];
const array2 = [[4, 5], 6];
const result = array1.concat(array2);
console.log(result); // [1, 2, 3, [4, 5], 6]
Symbol.isConcatSpreadableが真値の時はオブジェクトを配列として扱う
concatメソッドは、既定ではすべての配列風オブジェクトを配列として扱いませんが、Symbol.isConcatSpreadable
が真値(true
など)に設定された場合のみ、配列として扱います。
以下のサンプルコードでは、obj1
は配列風オブジェクトですが、Symbol.isConcatSpreadable
が設定されていないため、オブジェクト全体が配列に追加されています。一方、obj2
はSymbol.isConcatSpreadable
がtrue
に設定されているため、配列として扱われ、その要素が配列に追加されています。
const obj1 = { 0: 1, 1: 2, 2: 3, length: 3 };
const obj2 = { 0: 1, 1: 2, 2: 3, length: 3, [Symbol.isConcatSpreadable]: true };
console.log([0].concat(obj1, obj2));
// [ 0, { '0': 1, '1': 2, '2': 3, length: 3 }, 1, 2, 3 ]
元の配列のいずれかが疎配列の場合、結果の配列も疎配列になる
元の配列のいずれかが疎配列(スパース配列)の場合、結果の配列も疎配列になります。
以下のサンプルコードでは、疎配列を結合した結果も疎配列となっています。空のスロットはそのまま保持されます。
console.log([1, , 3].concat([4, 5])); // [1, empty, 3, 4, 5]
console.log([1, 2].concat([3, , 5])); // [1, 2, 3, empty, 5]
本記事のまとめ
この記事ではJavaScriptの配列を結合するメソッド『concatメソッド』について、以下の内容を説明しました。
concat
メソッドとはconcat
メソッドの構文concat
メソッドの使い方- 配列を結合する
- 複数の配列を結合する
- 配列と値を結合する
- 複数の文字列を結合する
- 配列を完全コピーする
concat
メソッドの特徴- オリジナルの配列は変更しない
- ネストされた配列をフラットにしない
Symbol.isConcatSpreadable
が真値の時はオブジェクトを配列として扱う- 元の配列のいずれかが疎配列の場合、結果の配列も疎配列になる
お読み頂きありがとうございました。