JavaScriptの分割代入 〜オブジェクトや配列からスマートにデータを取り出す〜

JavaScript学習ガイド

こんにちは、Reiです。

コードを書いていると、
オブジェクトや配列の中から
特定のデータを取り出したい場面がよくあります。

例えば、

・ユーザー情報の名前だけ取り出す
・配列の最初の要素を使う
・必要なデータだけ変数に入れる

といった処理です。

これまでの書き方でも実現できますが、
項目が増えるとコードが長くなってしまいます。


こうしたときに便利なのが
「分割代入(Destructuring)」 です。


分割代入を使うことで、
データの塊から必要な値をまとめて取り出すことができます。

JavaScriptではよく使われる便利な書き方なので、
基本から整理していきましょう!


基本の考え方「分割代入」

まずは、これまでの書き方を見てみましょう。

const user = {
  id: 1,
  name: "田中",
  age: 25
};

const name = user.name;
const age = user.age;

このように、
オブジェクトの値を取り出すときは
user.name のように書いて1つずつ変数に代入していました。


分割代入を使うと、次のように書くことができます。

const { name, age } = user;

これだけで、

name → “田中”
age → 25

がそれぞれの変数に代入されるのです。


オブジェクトの分割代入

オブジェクトの場合は、
取り出したい「キー名」を指定して値を取り出します。

const user = {
id: 1,
name: "田中",
age: 25
};

const { name, age } = user;
console.log(`${name}さんは${age}歳です`);

このコードでは、次のような処理が行われています。

① user オブジェクトを確認する
{
id: 1,
name: “田中”,
age: 25
}

② name と age のキーを探す
name → “田中”
age → 25

③ 同じ名前の変数に代入する
name = “田中”
age = 25

その結果、

田中さんは25歳です

と表示されます。

もし指定したキーが存在しない場合は、
エラーにはならず undefined(値がない状態)になります。


なぜ変数名を合わせる必要があるの?

オブジェクトの分割代入では、

const { name, age } = user;

のように書きます。

これは、

user.name
user.age

というキーを探して値を取り出す仕組みだからです。

つまり、

・name というキーの値 → name に代入
・age というキーの値 → age に代入

という対応関係になっています。


もし、

const { userName } = user;

のように書いた場合、
userName というキーは存在しないため

userName = undefined

になります。

そのため、基本的には
オブジェクトのキー名と同じ名前の変数を書く必要があります。


配列の分割代入

配列でも同じように
分割代入を使うことができます。

ただし、オブジェクトとは違い、
配列では「順番」で値が取り出されます。

const colors = ["赤", "青", "黄色"];

const [red, blue] = colors;
console.log(red);
console.log(blue);

このコードでは、次の順番で処理が行われています。

① 配列の最初の要素を取り出す
red = “赤”

② 次の要素を取り出す
blue = “青”

③ それぞれの変数に代入する


このように、

const [変数1, 変数2] = 配列

と書くことで、
配列の要素を順番に取り出すことができます。

オブジェクトの分割代入では { } を使いましたが、
配列では [ ] を使うのがポイントです!


必要な要素だけ取り出す

配列の分割代入では、
途中の要素を飛ばすこともできます。

const numbers = [10, 20, 30];

const [, , third] = numbers;
console.log(third); // 30 と出力される

10 → 無視
20 → 無視
30 → third
となります。

このように、
必要な位置のデータだけを取り出すこともできます。


別の名前で受け取る

オブジェクトの分割代入では、
変数名を変更して受け取ることもできます。

const user = {
name: "田中"
};

const { name: userName } = user;
console.log(userName);

name → userName
という名前で値を受け取っています。

既に同じ名前の変数がある場合などに
便利な書き方です。


デフォルト値を設定する

分割代入では、
値が存在しない場合の「初期値」を設定することもできます。

const user = {
name: "田中"
};

const { name, country = "日本" } = user;
console.log(country); // →日本 と出力

country が存在しないため、
日本 が自動的にcountryに代入されます。

このように、
データがない場合の保険として
デフォルト値を設定することができます。


Reactでよく使われる理由

Reactのコードでは、
分割代入がとてもよく使われます。

例えば、
コンポーネントが受け取るデータ(Props)は
次のように書かれることが多いです。

const Profile = ({ name, age }) => {
return <p>{name}さんは{age}歳です</p>;
};

この書き方では、

props.name
props.age

と書く代わりに、
関数の引数の段階で
分割代入を行っています。

このように分割代入を使うことで、

・コードが短くなる
・読みやすくなる
・タイピングミスを減らせる

といったメリットがあります。


まとめ

ここまで、JavaScriptの 分割代入 を見てきました。

分割代入を使うと、
オブジェクトや配列から必要な値を
簡単に取り出すことができます。

\\ 今回のまとめ //

・ 分割代入はデータの中から値を取り出す書き方
・ オブジェクトは { } を使ってキー名で取り出す
・ 配列は [ ] を使って順番で取り出す
・ 必要な要素だけ取り出すこともできる
・ 別名やデフォルト値を設定することも可能
・ Reactでは Props を受け取るときによく使われる


分割代入を使えるようになると、
コードをすっきり書けるようになります。

最初は少し記号が多く感じるかもしれませんが、
実際のコードを書いているうちに自然と慣れてきます。

ぜひ自分でもコードを書きながら、
使い方を試してみてください!

次は、
配列やオブジェクトをコピーしたり、
データをまとめたりできる便利な書き方

「スプレッド構文(Spread構文)」

を見ていきましょう!


コメント

タイトルとURLをコピーしました