🐘

JavaScript 分割代入

に公開

分割代入(Destructuring Assignment)

JavaScriptの分割代入は非常に便利な機能で、
複数の変数を一度に定義することができます。

これは配列やオブジェクトから値を抜き出して、
それぞれの変数に割り当てるという動作を行います。

ES6(ECMAScript 2015)から導入された機能で、
それ以前のJavaScriptでは利用することができませんでした。

その背景には、よりシンプルで効率的なコードを書くことができるようにする
というJavaScriptの進化の一環があります。

分割代入が導入される前は、配列やオブジェクトから複数の値を取り出すには
以下のようにそれぞれの値に対して個別に代入操作を行う必要がありました。

// 配列から値を取り出す例
var arr = ['one', 'two', 'three'];
var first = arr[0];
var second = arr[1];

// オブジェクトから値を取り出す例
var obj = {name: 'John', age: 20};
var name = obj.name;
var age = obj.age;

これはコードが冗長になり、特に大きなオブジェクトや配列から
複数の値を取り出す場合には手間がかかります...

また、各要素を取り出す際に毎回配列やオブジェクトを参照する必要があり、ミスの原因にもなります。

それに対して、分割代入を使うと、以下のように一行で複数の変数への代入が可能になります!

// 配列から値を取り出す例
let arr = ['one', 'two', 'three'];
let [first, second] = arr;

// オブジェクトから値を取り出す例
let obj = {name: 'John', age: 20};
let {name, age} = obj;

これにより、コードがシンプルになり、可読性が向上します。
さらに、大きなデータ構造から必要な値だけを取り出して新しい変数に代入する操作も簡潔に書けるようになりました。

また、関数の戻り値が配列やオブジェクトで複数の値を返す場合に、
それらの値を一度に複数の変数に代入することが可能になりました。

これにより、関数の利用がより柔軟になり、一部の値だけを簡単に取り出すことができます。

配列の分割代入

配列の要素をそれぞれ別の変数に代入することができます。
以下の例では、firstとsecondにそれぞれ配列の最初の2つの要素が代入されます。

let numbers = [1, 2, 3];
let [a, b, c] = numbers;

console.log(a); // 1
console.log(b); // 2
console.log(c); // 3

numbersという配列から値を取り出し、それぞれを変数a、b、cに代入しています。
その結果、aは1、bは2、cは3をそれぞれ保持します。

また、restパラメータと組み合わせることで、
特定の要素だけを取り出して残りの要素を別の変数にまとめて代入することもできます。

let arr = ['one', 'two', 'three', 'four'];
let [first, ...rest] = arr;

console.log(first); // 'one'
console.log(rest);  // ['two', 'three', 'four']

オブジェクトの分割代入

オブジェクトのプロパティも分割代入できます。
以下の例では、オブジェクトobjのnameプロパティとageプロパティがそれぞれ同名の変数に代入されます。

let obj = {name: 'John', age: 20};
let {name, age} = obj;

console.log(name); // 'John'
console.log(age);  // 20

また、オブジェクトのプロパティを別の名前の変数に代入することも可能です。

以下の例では、objのnameプロパティがpersonName変数に、
ageプロパティがpersonAge変数に代入されます。

let obj = {name: 'John', age: 20};
let {name: personName, age: personAge} = obj;

console.log(personName); // 'John'
console.log(personAge);  // 20

分割代入を使うと、配列やオブジェクトから特定の要素を簡単に取り出すことができ、
コードがシンプルで読みやすくなります。

また、関数の戻り値を複数の変数に分けて代入する場合などにも利用できます!


今日はここまで!

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment

Discussion