9
5

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.

スプレッド演算子と分割代入

Last updated at Posted at 2018-12-13

この記事はJavaScript Advent Calendar 2018 14日目の記事です。

何かと役立ちそうなスプレッド演算子と分割代入についてです。
ブラウザで使用する際はBabelにかけた方が良いと思います。

スプレッド演算子

スプレッド演算子は配列やオブジェクトなどをその場に展開します。

let array = [1, 2, 3];
func(...array); // => func(1, 2, 3);
let array1 = [1, 2, 3];
let array2 = [...array1, 4, 5]; // => [1, 2, 3, 4, 5]

関数の引数にスプレッド演算子を使えば、配列のメソッドが使用できます。

function increment (...nums) {
  return nums.map(v => v + 1);
}

increment(1, 2, 3); // => [2, 3, 4]

関数の引数の情報をもったargumentsオブジェクトがありますが、こちらはArray-likeオブジェクトのため配列のメソッドは使用できません。

分割代入

配列やオブジェクトの値を別個の変数に値を代入できます。

let [a, b, c] = [1, 2, 3];
console.log(a); // => 1
console.log(b); // => 2
console.log(c); // => 3

let {x: foo, y: bar} = {x: 1, y: 2};
console.log(foo); // => 1
console.log(bar); // => 2

以下のようにすれば、変数の値を簡単に入れ替えられます。

[a, b] = [b, a];
[a, b, c] = [c, b, a];

組み合わせて使う

スプレッド演算子と分割代入を組み合わせて使うと便利です。
以下のようにすれば、配列の残りの部分を変数に格納できます。

let [a, b, ...c] = [1, 2, 3, 4, 5];
console.log(a); // => 1
console.log(b); // => 2
console.log(c); // => [3, 4, 5]

なお、配列の最初の方を取り出すことはできないようです。

let [...a, b, c] = [1, 2, 3, 4, 5]; // => エラー

文字列を.split('')のように分割できます。

let [...str] = 'hello';
console.log(str); // => ['h', 'e', 'l', 'l', 'o']
function upperEven (str) {
	return [...str].map((v, i) => (i + 1) % 2 === 0 ? v.toUpperCase() : v).join('');
}
upperEven('hello'); // => 'hElLo'

参考

スプレッド構文 | MDN

【JavaScript】スプレッド演算子の便利な使い方まとめ - Qiita

JSのスプレッド演算子を理解する - Qiita

分割代入 | MDN


明日は@OldBigBuddhaさんです。

9
5
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
9
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?