inazuma code :配列
配列(Array) は、複数の値を順序付きで格納できるデータ構造です。
配列は数値インデックスで要素にアクセスでき、要素の追加・更新・分割代入などの操作にも対応 しています。
配列リテラル
配列は角括弧 [ ]
を使って記述します。
要素はカンマ区切りで並べ、各要素にはリテラル・変数・式を指定できます。
[] // 空配列
[1, 2, 3] // 数値の配列
["a", "b", "c"] // 文字列の配列
[[1, 2], [3, 4]] // ネスト配列
[a, b, a + b] // 式を含む配列
要素アクセス
配列の要素には [インデックス]
でアクセスします。
インデックスは 0 から始まります。
let x = [1, 2, 3];
x[0]; // 1
x[1 + 1]; // 3(式を利用)
多次元配列にも同様にアクセスできます。
let matrix = [[1, 2], [3, 4]];
matrix[1][0]; // 3
存在しないインデックスは null
を返します。
let arr = [1, 2];
arr[99]; // null
オプショナルチェイニングによる安全なアクセス
存在しないインデックスや null
に対して安全にアクセスするには、?.
を使います。
let x = null;
x?.[0]; // null
let y = [];
y[0]?.[1]; // null(途中で null があれば即座に null)
要素の更新
let
で宣言された変数でも、インデックスを指定して配列の要素を更新できます。
let a = [1, 2, 3];
a[1] = 5; // [1, 5, 3]
// 多次元配列の要素更新
let matrix = [[0, 1, 2], [3, 4, 5]];
matrix[1][2] = 42;
スプレッド構文(...
)
...
を使うと、配列の中に別の配列を展開できます。
let a = [2, 3];
[1, ...a, 4]; // [1, 2, 3, 4]
let b = [];
[0, ...b, 1]; // [0, 1]
// 複数の配列を連結
let x = [1];
let y = [2];
[...x, ...y, 3]; // [1, 2, 3]
スプレッドの対象には式も使えます。
let arr = [...(1 > 0 ? [10, 20] : [30])]; // [10, 20]
分割代入
分割代入を使うと、複数の変数にまとめて値を割り当てられます。
let [x, y] = [10, 20];
// x = 10, y = 20
// 末尾カンマも可
let [a, b,] = [1, 2];
// 残余要素(rest)
let [first, second, ...rest] = [1, 2, 3, 4];
// first = 1, second = 2, rest = [3, 4]
// 未定義要素には null
let [p, q, r] = [1, 2];
// r は null
まとめ
- 配列のインデックスは 0 から始まります。
- 存在しないインデックスは
null
を返します。 - オプショナルチェイニング(
?.
)で安全にアクセスできます。 let
宣言の配列でも中身の要素は変更できます。- スプレッド、残余要素、分割代入、末尾カンマに対応しています。