JavaScriptにおける配列(Array)は、ウェブ開発の現場で最も頻繁に使用されるデータ構造の一つである。特にフロントエンドからバックエンドに至るまで、データの整理・操作・表示に不可欠な役割を果たしている。この記事では、JavaScript配列の基礎から応用までを網羅的かつ体系的に解説する。初心者から上級者まで、あらゆるレベルの開発者が再確認すべき内容を含み、配列の本質的な理解と実践的な利用法を提供する。
配列の基本
JavaScriptにおける配列は、複数の値を一つの変数で扱えるデータ構造である。例えば、以下のようにして配列を定義できる。

javascriptlet fruits = ["りんご", "みかん", "ぶどう"];
この配列は3つの文字列要素を持っており、各要素にはインデックス(0から始まる番号)を使ってアクセスできる。
javascriptconsole.log(fruits[0]); // "りんご"
配列の生成方法
配列は複数の方法で生成できる。
javascript// リテラルによる定義
let numbers = [1, 2, 3, 4];
// Array コンストラクタを使用
let emptyArray = new Array(); // 空の配列
let predefinedLengthArray = new Array(5); // 長さ5の空配列
// Array.of()
let values = Array.of(7, 8, 9); // [7, 8, 9]
// Array.from()
let str = "配列";
let arrFromStr = Array.from(str); // ["配", "列"]
配列の基本操作
要素の追加と削除
操作方法 | 説明 | 使用例 |
---|---|---|
push() |
配列の末尾に要素を追加する | array.push("新要素") |
pop() |
配列の末尾の要素を削除する | array.pop() |
unshift() |
配列の先頭に要素を追加する | array.unshift("最初の要素") |
shift() |
配列の先頭の要素を削除する | array.shift() |
splice() |
任意の位置に要素を追加・削除する | array.splice(1, 2, "新1", "新2") |
slice() |
配列の一部を取り出して新しい配列を作成 | array.slice(1, 3) |
javascriptlet colors = ["赤", "青", "緑"];
colors.push("黄色"); // ["赤", "青", "緑", "黄色"]
colors.shift(); // ["青", "緑", "黄色"]
colors.splice(1, 1, "黒"); // ["青", "黒", "黄色"]
配列の探索と変換
要素の検索
-
indexOf(value)
: 最初に見つかった値のインデックスを返す。見つからない場合は -1。 -
includes(value)
: 指定した値が含まれているかどうかを真偽値で返す。 -
find(callback)
: 条件に一致する最初の要素を返す。 -
findIndex(callback)
: 条件に一致する最初の要素のインデックスを返す。
javascriptlet animals = ["猫", "犬", "鳥", "魚"];
console.log(animals.includes("犬")); // true
console.log(animals.find(a => a.length === 2)); // "猫"
配列の反復と操作メソッド
反復処理
メソッド名 | 主な用途 |
---|---|
forEach() |
各要素に対して関数を実行する |
map() |
各要素に対する関数の結果で新配列を生成 |
filter() |
条件に一致する要素だけの新配列を生成 |
reduce() |
すべての要素を畳み込んで1つの値に変換 |
some() |
条件に一致する要素が1つでもあればtrue |
every() |
すべての要素が条件を満たす場合にtrue |
javascriptlet numbers = [1, 2, 3, 4, 5];
let squared = numbers.map(n => n * n); // [1, 4, 9, 16, 25]
let even = numbers.filter(n => n % 2 === 0); // [2, 4]
let sum = numbers.reduce((acc, val) => acc + val, 0); // 15
配列の並び替えと反転
sort()
とreverse()
-
sort()
:配列の要素をソートする(デフォルトは文字列のUnicode順) -
reverse()
:配列の順序を反転する
数値をソートする場合、比較関数が必要になる。
javascriptlet nums = [10, 5, 20, 15];
nums.sort((a, b) => a - b); // [5, 10, 15, 20]
nums.reverse(); // [20, 15, 10, 5]
多次元配列
JavaScriptでは配列の中に配列を持つことで多次元配列を実現できる。
javascriptlet matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
console.log(matrix[1][2]); // 6
配列の展開と破壊的代入(スプレッド・分割代入)
スプレッド構文(…)
javascriptlet arr1 = [1, 2, 3];
let arr2 = [...arr1, 4, 5]; // [1, 2, 3, 4, 5]
分割代入
javascriptlet [first, second] = ["春", "夏", "秋", "冬"];
console.log(first); // "春"
配列のユーティリティテクニック
重複を削除する
javascriptlet items = [1, 2, 2, 3, 3, 3];
let uniqueItems = [...new Set(items)]; // [1, 2, 3]
配列をフラットにする
javascriptlet nested = [1, [2, [3, [4]]]];
let flat = nested.flat(2); // [1, 2, 3, [4]]
配列とパフォーマンス
大規模データを扱う場合、配列操作の選び方はパフォーマンスに影響する。
操作 | 計算量(概算) |
---|---|
push() / pop() |
O(1) |
shift() / unshift() |
O(n) |
splice() (中間操作) |
O(n) |
map() / filter() |
O(n) |
特に頻繁に先頭を操作する必要がある場合は、Deque
(両端キュー)に近い構造の利用を検討すべきである。
配列とメモリ
JavaScriptの配列は内部的にはハッシュマップのような構造で動作するため、数値連番以外のインデックス(連想配列的な使い方)を混ぜるとパフォーマンスが悪化する可能性がある。
javascriptlet arr = [];
arr[0] = "A";
arr["key"] = "B"; // これはオブジェクト的な使い方
このような場合、代わりにオブジェクトやMapを使用するのが適切である。
配列と型
JavaScriptの配列は型が混在できる特徴を持っている。
javascriptlet mixed = [1, "文字列", true, null, undefined, {key: "値"}, [1, 2]];
しかし、意図的に型を揃えておくことでバグの発生を減らし、読みやすさと保守性を向上させることができる。TypeScriptなどの静的型付け言語の導入も有効である。
実践例:配列を使ったデータ処理
以下は、JSON形式のデータから特定の条件でフィルタ・ソート・集計を行う例である。
javascriptlet users = [
{name: "山田", age: 25},
{name: "佐藤", age: 30},
{name: "鈴木", age: 22},
{name: "田中", age: 35}
];
// 30歳以上のユーザー名を年齢順で取得
let result = users
.filter(u => u.age >= 30)
.sort((a, b) => a.age - b.age)
.map(u => u.name);
console.log(result); // ["佐藤", "田中"]
結論と参考資料
JavaScriptの配列はシンプルでありながら非常に強力なデータ構造である。その柔軟性と多機能性は、小規模なスクリプトから大規模なWebアプリケーションまで、あらゆる場面で活用できる。多くの開発者が無意識に使っている基本的な操作に加えて、今回紹介した高等テクニックやパフォーマンスへの配慮も含め、配列を理解することはJavaScriptを極める道において不可欠である。
参考文献
-
MDN Web Docs – Array: https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array
-
JavaScript: The Definitive Guide, David Flanagan
-
Effective JavaScript, David Herman
-
ECMAScript 2023 Language Specification
-
『モダンJavaScriptの基礎から応用まで』技術評論社
日本の読者の皆様がより深くJavaScript配列の仕組みを理解し、日々の開発や学習においてより良い成果を得られることを願っている。