20
11

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 5 years have passed since last update.

un-T factory! XAAdvent Calendar 2018

Day 7

【JavaScript】Spread構文とRestパラメーターを使いこなそう

Last updated at Posted at 2018-12-07

どうも、KORPLUSです。

JavaScriptのSpread構文とRestパラメーターについて、
ユースケースを交え解説していきます。

対象読者

・ES2015をこれから使っていきたい人

Spread構文とは

関数呼び出しでは 0 個以上の引数として、
Array リテラルでは 0 個以上の要素として、
オブジェクトをその場で展開してくれる構文です。

要は使う場所によって、
都合の良い形でオブジェクトを展開してくれるという事です(^o^)

使い方

展開したい要素の接頭辞に...

  • 関数呼び出しの場合

function multiplication(x, y, z) {
  return x * y * z;
}

const numbers = [1, 2, 3];
multiplication(...numbers);  //6

  • Array リテラルの場合
const addCompanies = ['google', 'apple'];
const companies = ['facebook', ...addCompanies, 'amazon'];

companies // ["facebook","google","apple","amazon"]

ユースケース

  • new 演算子と併用する

スプレッド演算子が登場する以前までは、
配列を引数をして指定する場合、Function.prototype.applyを使用する
が一般的でした。

(例)

function multiplication(x, y, z) {
  return x * y * z;
}

const numbers = [1, 2, 3];
multiplication.apply(null, numbers);

ただ、コンストラクタをnew演算子で呼ぶ時に使えないというデメリットがありました。

スプレッド演算子を使用すれば、new演算子で使用する事ができるので、
そういった問題もなくなります(^o^)

var data = [10, 20, 30];  
var object = new myObject(...data);
  • Arrayの連結

Array の連結には Array.concat がよく使われますが、
スプレッド構文を使用する事で、以下のメリットが得られます。

・配列の順序を簡単に変えられる
・要素を簡単に追加する事ができる

const arr1 = [1, 2, 3];
const arr2 = [4, 5, 6];

const arrNomal = [...arr1, ...arr2];

// 配列1と2の順番を入れ替える
const arrShuffle = [...arr2, ...arr1];

// 要素を追加する
const arrAddElement = ['hoge', ...arr2, 'hoge2', ...arr1];

Restパラメーターとは

不特定多数の引数を配列として受け取る構文です。
受け取る引数の数が決まってなくても、受け取っただけ配列にいれてくれます。(^^)

使い方

関数の最後の名前付き引数に ... の接頭辞を付ける

ユースケース

function multiplication(...numbers) {
  return numbers.reduce((accumulation, current) => {
    return accumulation * current;
  });
}

// 3つ引数を渡す
multiplication(1, 2, 3); // 6

// 4つ引数を渡す
multiplication(1, 2, 3, 4); // 24

まとめ

・Spread構文は、オブジェクトをその場で展開してくれる
・new 演算子と併用する、Arrayの連結に使うと便利
・Restパラメーターは、不特定多数の引数を配列として受け取る事ができる

注意点
ES2015以降の記法なので、
レガシーブラウザに対応させる場合は、トランスパイラ(Babel等)を使用し、
ES5記法にトランスパイルをおこなってください。

20
11
1

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
20
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?