メインコンテンツまでスキップ

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 宣言の配列でも中身の要素は変更できます。
  • スプレッド、残余要素、分割代入、末尾カンマに対応しています。