配列
同じ型のデータを順序つきで格納し、インデックスで要素にアクセスできるデータ構造
プログラミングデータ構造
配列とは
配列 (Array) は、複数のデータを順序つきで格納するデータ構造である。各要素にはインデックス (0 から始まる番号) でアクセスできる。
基本操作
// 作成
const fruits = ["apple", "banana", "cherry"];
// 参照 (インデックスは 0 始まり)
console.log(fruits[0]); // "apple"
console.log(fruits[2]); // "cherry"
// 長さ
console.log(fruits.length); // 3
要素の追加と削除
const items = [1, 2, 3];
// 末尾に追加
items.push(4); // [1, 2, 3, 4]
// 末尾を削除
items.pop(); // [1, 2, 3]
// 先頭に追加
items.unshift(0); // [0, 1, 2, 3]
// 先頭を削除
items.shift(); // [1, 2, 3]
// 任意の位置で追加・削除
items.splice(1, 1); // [1, 3] (インデックス 1 から 1 個削除)
items.splice(1, 0, 2); // [1, 2, 3] (インデックス 1 に 2 を挿入)
主要な配列メソッド
| メソッド | 用途 | 戻り値 |
|---|---|---|
| map | 各要素を変換 | 新しい配列 |
| filter | 条件に合う要素を抽出 | 新しい配列 |
| find | 条件に合う最初の要素 | 要素 or undefined |
| reduce | 全要素を 1 つの値に集約 | 集約結果 |
| some | 1 つでも条件を満たすか | boolean |
| every | 全て条件を満たすか | boolean |
| includes | 特定の値を含むか | boolean |
| sort | 並び替え | 元の配列 (破壊的) |
const numbers = [1, 2, 3, 4, 5];
const doubled = numbers.map(n => n * 2); // [2, 4, 6, 8, 10]
const even = numbers.filter(n => n % 2 === 0); // [2, 4]
const sum = numbers.reduce((a, b) => a + b, 0); // 15
const found = numbers.find(n => n > 3); // 4
破壊的メソッドと非破壊的メソッド
配列メソッドには元の配列を変更するもの (破壊的) と、新しい配列を返すもの (非破壊的) がある。
| 破壊的 | 非破壊的 |
|---|---|
| push, pop, shift, unshift | map, filter, slice |
| sort, reverse, splice | concat, flat, toSorted |
意図しない変更を防ぐため、非破壊的メソッドを優先する。
スプレッド構文
配列のコピーや結合にはスプレッド構文が便利である。
const a = [1, 2, 3];
const b = [4, 5, 6];
const copy = [...a]; // [1, 2, 3] (浅いコピー)
const merged = [...a, ...b]; // [1, 2, 3, 4, 5, 6]
型付き配列
TypeScript では配列の要素の型を指定できる。
const names: string[] = ["Alice", "Bob"];
const scores: number[] = [90, 85, 72];
const mixed: (string | number)[] = ["Alice", 90]; // ユニオン型
多次元配列
配列の中に配列を入れると多次元配列になる。
const matrix: number[][] = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
];
console.log(matrix[1][2]); // 6
よくある間違い
| 間違い | 問題 | 対策 |
|---|---|---|
| 範囲外アクセス | undefined が返る | length で範囲チェック |
| sort の罠 | 文字列比較がデフォルト | 比較関数を渡す |
| 浅いコピー | ネストしたオブジェクトは共有 | structuredClone を使う |
| forEach で break | break が使えない | for...of に切り替える |
配列とデータ構造の基礎は関連書籍に詳しい。
この記事は役に立ちましたか?