📂

分割代入について

2023/06/27に公開

始めに

JavaScriptではオブジェクトの分割代入を利用すると、オブジェクトから特定のプロパティを取り出し、それらを個別の変数に代入することができます。
オブジェクトの場合、分割代入はオブジェクトのプロパティ名に基づいて行われます。

分割代入の例

オブジェクトの分割代入

{
  contents: {
    users: {
      name: 'takashi',
      age: 20,
    },
    animals: {
      name: 'lion',
      age: 10,
    },
  }
};

分割代入によって受け取ると

let { contents } = {
  contents: {
    users: {
      name: 'takashi',
      age: 20,
    },
    animals: {
      name: 'lion',
      age: 10,
    },
  }
};

console.log(contents);
// => {
//   "users": {
//     "name": "takashi",
//     "age": 20
//   },
//   "animals": {
//     "name": "lion",
//     "age": 10
//   },
// }

このようになります。

ネストしたオブジェクトの分割代入

let { contents: { users } } = {
  contents: {
    users: {
      name: 'takashi',
      age: 20,
    },
    animals: {
      name: 'lion',
      age: 10,
    },
  }
};
console.log(users);
// => {
//   "name": "takashi",
//   "age": 20
// }

このように複数受け取ることも可能です。

let { contents: { users, animals } } = {
  contents: {
    users: {
      name: 'takashi',
      age: 20,
    },
    animals: {
      name: 'lion',
      age: 10,
    },
  }
};
console.log(users);
// => {
//   "name": "takashi",
//   "age": 20
// }
console.log(animals);
// => {
//   name: 'lion',
//   age: 10,
// }

デフォルト値を指定した分割代入

例えばこのような場合があります。

let [
  { collection }, 
  { project }
] = [
  { collection: { id: 'abcd', name: 'hoge' } }, 
  { project: { id: '12345', name: 'fuga' } }
];

上記では、collectionとprojectの変数に分割代入されます。

ですが、以下のような場合エラーが発生します。

let [
  { collection }, 
  { project }
] = [
  { collection: { id: 'abcd', name: 'hoge' } }
];

"Cannot read properties of undefined (reading 'project')"となります。
これを回避するためには、projectにデフォルト値を設定します。

let [
  { collection }, 
  { project }  = {}
] = [
  { collection: { id: 'abcd', name: 'hoge' } }
];

こうすることで、projectがない場合でもエラーを回避することができます。

最後に

このように、分割代入をうまく活用することで、より効率的で簡潔なコードを書くことができます。ただし、代入元のオブジェクトや配列の構造が予測不能な場合や、デフォルト値を適切に設定しない場合は、エラーが発生する可能性があるため注意が必要です。

GitHubで編集を提案

Discussion