可変長引数のメソッドに配列を適応させたいときがある。
1 2 |
Math.max([2,4,8,5,1]); //=>NaN Math.max(2,4,8,5,1); //=>8 |
なんとなくapplyしたり…付けたりしてたのをちょっと確認。
Applyを使う
1 2 3 4 5 6 7 |
let arr = [2,4,8,5,1]; Math.max.apply(this, arr); //これは以下のように書いているような感じ this.Math.max(2,3,8,5,1); Math.max.call(this, 2,3,8,5,1); Math.max.bind(this, 2,3,8,5,1)(); |
実行オブジェクトはthisでなくても問題ないです。
スプレッド構文(Spread operator)を使う
...args
という風に書くことでArrayやObject(key-value)を展開します。
Objectの方は単純結合に使った記憶しかないですがArrayではよく使います。
1 2 |
let arr = [2,4,8,5,1]; Math.apply(...arr); |
理解してれば一番使いやすい。
これは配列を展開しているので以下のようなこともできます。
1 |
let arr = [1,2,...[3,4],5]; //=>[1,2,3,4,5] |
concat
(結合)やsplice
(挿入)の代わりに使えたりします。
オブジェクトの場合はkey-valueセットで展開されます。
1 2 3 4 |
let obj1 = {a:1}; let obj2 = {b:8}; let cmb1 = {obj1, obj2} //=>{obj1:{a:1}, obj2:{b:8}} let cmb2 = {...obj1, ...obj2} //=>{a:1, b:8} |
簡易assign
としてマージに使えます。
ググるときに調べにくいことを除けば使い勝手が良いと思います。