JavaScript - 継続的デストラクチャリング

こんにちは、未来のJavaScriptの魔術師たち!今日は、継続的デストラクチャリングの世界への興奮的な旅を始めます。その名前が少し威圧的聞こえるかもしれませんが、心配しないでください。このレッスンの終わりまでに、あなたはプロのように継続的デストラクチャリングをマスターするでしょう!

JavaScript - Nested Destructuring

継続的デストラクチャリング

深いところに入る前に、デストラクチャリングとは何か、簡単に復習しましょう。あなたが一個のボックス(オブジェクトまたは配列)の中にたくさんのアイテムを持っていて、特定のアイテムを取り出したいとします。デストラクチャリングは、そのボックスの中に手を伸ばして、必要なものを一気に取り出すようなものです。素晴らしいでしょう?

さて、継続的デストラクチャリングは、ボックスの中にさらにボックスが入っていて、その内側のボックスからもアイテムを取り出したい場合です。データのロシアン nested dollのようです!

簡単な例から始めて、少しずつ難しくしていきましょう。

継続的オブジェクトデストラクチャリング

ゲームを作成しているとします。プレイヤーオブジェクトにいくつかの継続的な情報があります。以下のようにデストラクチャリングするかもしれません:

const player = {
name: "Mario",
game: "Super Mario Bros",
details: {
age: 35,
occupation: "Plumber"
}
};

const { name, details: { age } } = player;

console.log(name);  // 出力: Mario
console.log(age);   // 出力: 35

この例では、playerオブジェクトに手を伸ばし、トップレベルのnameを取り出し、detailsオブジェクトの中からageを取り出します。まるで、「名前をくれ、そして、detailsの中から年齢も一緒にくれ」と言うようなものです。

もっと複雑なものに挑戦してみましょう:

const game = {
title: "Final Fantasy VII",
platform: "PlayStation",
characters: {
protagonist: {
name: "Cloud Strife",
weapon: "Buster Sword"
},
antagonist: {
name: "Sephiroth",
weapon: "Masamune"
}
}
};

const { title, characters: { protagonist: { name: heroName, weapon: heroWeapon } } } = game;

console.log(title);       // 出力: Final Fantasy VII
console.log(heroName);    // 出力: Cloud Strife
console.log(heroWeapon);  // 出力: Buster Sword

ここでは、2段階まで潜ります!トップレベルのtitleを取り出し、characters、そしてprotagonistに進み、最終的にnameweaponを取り出します。また、heroNameheroWeaponに名前を変更して明確にしています。

継続的配列デストラクチャリング

配列も継続的です!以下の例を見てみましょう:

const coordinates = [10, 20, [30, 40]];

const [x, y, [z, w]] = coordinates;

console.log(x);  // 出力: 10
console.log(y);  // 出力: 20
console.log(z);  // 出力: 30
console.log(w);  // 出力: 40

この場合、配列の継続的デストラクチャリングを行っています。coordinates配列の3番目の要素は、自身が配列であるため、別の角括弧を使用してデストラクチャリングします。

もっと複雑なものに挑戦してみましょう:

const matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];

const [[a, b, c], [d, e, f], [g, h, i]] = matrix;

console.log(a, e, i);  // 出力: 1 5 9

ここでは、3x3のマトリックスをデストラクチャリングしています。デストラクチャリングパターンの各内包配列は、マトリックスの各行に対応しています。

配列とオブジェクトの混合 - 継続的デストラクチャリング

少し混ぜてみましょう。オブジェクトの中に配列がある場合どうでしょうか?

const student = {
name: "Alice",
age: 20,
grades: [85, 90, 92]
};

const { name, grades: [firstGrade, ...otherGrades] } = student;

console.log(name);         // 出力: Alice
console.log(firstGrade);   // 出力: 85
console.log(otherGrades);  // 出力: [90, 92]

この例では、オブジェクトからnameを取り出し、grades配列をデストラクチャリングしています。最初の成績を個別に取り出し、残りの成績を新しい配列に集約しています。

配列の中のオブジェクト - 継続的デストラクチャリング

最後に、オブジェクトを配列の中からデストラクチャリングしてみましょう:

const team = [
{ name: "John", role: "Developer" },
{ name: "Jane", role: "Designer" },
{ name: "Jack", role: "Manager" }
];

const [{ name: firstName }, , { role }] = team;

console.log(firstName);  // 出力: John
console.log(role);       // 出力: Manager

ここでは、配列の最初と最後のオブジェクトをデストラクチャリングしています。最初のオブジェクトからnameを取り出し(firstNameに名前を変更)、2番目のオブジェクトをスキップし、最後のオブジェクトからroleを取り出しています。

メソッドの表

ここでカバーしたメソッドをまとめた表を示します:

メソッド 説明
オブジェクトデストラクチャリング オブジェクトから値を抽出 const { name, age } = person;
配列デストラクチャリング 配列から値を抽出 const [x, y] = coordinates;
継続的オブジェクトデストラクチャリング 継続的オブジェクトから値を抽出 const { details: { age } } = player;
継続的配列デストラクチャリング 継続的配列から値を抽出 const [x, [y, z]] = nestedArray;
混合デストラクチャリング オブジェクトと配列のデストラクチャリングを組み合わせる const { grades: [firstGrade] } = student;
名前の変更 デストラクチャリングされた値に別の変数名を割り当てる const { name: firstName } = person;
リスト演算子 残りの値を配列に集約する const [first, ...rest] = numbers;

そして、ここまでで、あなたはJavaScriptのスキルを一層強化した継続的デストラクチャリングを学びました。実践が大事ですので、これらの概念を自分のコードで試してみてください。幸せなコードを!

Credits: Image by storyset