0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

js構文 スプレッド構文

Last updated at Posted at 2023-08-05

スプレッド構文(Spread Syntax)を使用すると、配列やオブジェクトなどのイテラブルな要素を展開して、別の配列やオブジェクトに含めることができます。スプレッド構文は、コードを簡潔にしたり、配列やオブジェクトを結合したりする際に便利です。

配列の展開:

const array1 = [1, 2, 3];
const array2 = [4, 5, 6];

const combinedArray = [...array1, ...array2];
console.log(combinedArray); // [1, 2, 3, 4, 5, 6]

オブジェクトの展開:

const obj1 = { a: 1, b: 2 };
const obj2 = { c: 3, d: 4 };

const combinedObject = { ...obj1, ...obj2 };
console.log(combinedObject); // { a: 1, b: 2, c: 3, d: 4 }

配列のコピー:

const originalArray = [1, 2, 3];
const copiedArray = [...originalArray];
console.log(copiedArray); // [1, 2, 3]

配列要素の追加:

const originalArray = [1, 2, 3];
const newArray = [...originalArray, 4, 5];
console.log(newArray); // [1, 2, 3, 4, 5]

スプレッド構文は、関数呼び出しの際にも使うことができます。例えば、関数に可変数の引数を渡す際に使われることがあります。

function sum(a, b, c) {
  return a + b + c;
}

const numbers = [1, 2, 3];

const result = sum(...numbers);
console.log(result); // 6

このように、スプレッド構文は配列やオブジェクトを展開する際に非常に便利な構文です。

追加例 オブジェクト

オブジェクトのプロパティを展開して新しいオブジェクトを作成:

const person = { firstName: 'John', lastName: 'Doe' };
const updatedPerson = { ...person, age: 30 };

console.log(updatedPerson);
// { firstName: 'John', lastName: 'Doe', age: 30 }

オブジェクトの一部のプロパティを上書き:

const person = { firstName: 'John', lastName: 'Doe', age: 25 };
const updatedPerson = { ...person, age: 30 };

console.log(updatedPerson);
// { firstName: 'John', lastName: 'Doe', age: 30 }

ネストされたオブジェクトのスプレッド:

const originalObject = {
  person: { firstName: 'John', lastName: 'Doe' },
  address: { city: 'New York', country: 'USA' }
};

const updatedObject = {
  ...originalObject,
  person: { ...originalObject.person, age: 30 }
};

console.log(updatedObject);
/*
{
  person: { firstName: 'John', lastName: 'Doe', age: 30 },
  address: { city: 'New York', country: 'USA' }
}
*/

ネストされたオブジェクトとは、他のオブジェクトの中に含まれるオブジェクトのことを指します。言い換えれば、オブジェクトのプロパティが別のオブジェクトで構成されている状態を指します。これにより、複雑なデータ構造を表現することができます。

追加例 :

const person = {
  firstName: 'John',
  lastName: 'Doe',
  age: 30,
  address: {
    street: '123 Main St',
    city: 'New York',
    country: 'USA'
  }
};

この例では、person オブジェクト内の address プロパティが別のオブジェクトであり、そのオブジェクト内には住所に関連する情報が含まれています。これによって、1つのオブジェクトで関連する情報をグループ化し、階層構造を持たせることができます。

ネストされたオブジェクトを使用することで、より複雑なデータを表現できるだけでなく、コードをより構造化し、情報を効果的に整理することもできます。ネストされたオブジェクトは、データベースのテーブルのような関連性や、JSON形式のデータ構造など、さまざまな場面で使用されます。


スプレッド演算子の使用を制限する(Rest parametersとの違い):

const { a, ...rest } = { a: 1, b: 2, c: 3 };
console.log(a); // 1
console.log(rest); // { b: 2, c: 3 }

...rest は、オブジェクトや配列の分割代入(Destructuring Assignment)において、残りの要素をまとめて取得するための構文です。スプレッド構文(Spread Syntax)と似たような構文ですが、異なるコンテキストで使用されます。

スプレッド構文は、配列やオブジェクトを展開して要素を別の配列やオブジェクトにコピーするために使用されました。一方で、...rest は、主に分割代入の際に、特定のプロパティを抽出して新しいオブジェクトにまとめるために使用されます。

オブジェクトの分割代入における ...rest の追加例:

const person = { firstName: 'John', lastName: 'Doe', age: 30, city: 'New York' };

const { firstName, lastName, ...details } = person;

console.log(firstName); // 'John'
console.log(lastName);  // 'Doe'
console.log(details);   // { age: 30, city: 'New York' }

上記の例では、firstName と lastName プロパティを抽出し、残りのプロパティは ...details という新しいオブジェクトにまとめられています。

配列の分割代入における ...rest の使用:

const numbers = [1, 2, 3, 4, 5];

const [first, second, ...restNumbers] = numbers;

console.log(first);        // 1
console.log(second);       // 2
console.log(restNumbers);  // [3, 4, 5]

この例では、最初の要素と2番目の要素を抽出し、残りの要素は ...restNumbers 配列にまとめられています。

...rest は、特定の要素を抽出する際に非常に便利で、分割代入の柔軟性を高めるための重要な機能です。スプレッド構文と同様に、...rest もコードをシンプルにし、効率的なデータ操作を可能にします。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?