[javascript] 配列をうまく受け取る方法

小ネタなんですが。javascriptで、関数が配列を返す場合ってあるじゃないですか。それをうまく受け取る方法はないかなと思いまして。

どういうことかというと、例えば、idを投げたらnameとmailが返ってくる関数があったとするじゃないですか。それをそれぞれ格納したいわけです。普通にやろうとするとこんな感じ。

function getUserInfo ( id ) {
  // nameとmailを取得する処理
  return [ name, mail ];
}

var result = getUserInfo(1); //id=1の情報をとる
var name = result[0];
var mail = result[1];

ここで、resultっていうのを使ってますが、これって本来はいらないじゃないですか。なので、resultのような余分な変数を使わずにかけないか考えていたんですね。

実は、phpには、listという関数があります。配列を使って複数の変数への代入を一気におこなえるんですね。例えば、

list($a, $b, $c) = array("A", "B", "C");

というように書けば、$aにはAが、$bにはBが、$cにはCが入るんですね。こういうのがあれば、

list(name, mail) = getUserInfo(1);

とかけるんですよね。ただ、javascriptにはそんな関数はないみたい。

しかし、もっとjavascriptではもっと簡単に次のように書けることがわかりました。

[name, mail] = getUserInfo(1);

配列から配列へさくっと代入できるんですね。直観的ですごくわかりやすいです。この機能は、分割代入(destructuring assignment)というみたいですね。これがあれば、例えばaとbの値を入れ替えるというときも

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

と書けるわけですね。一時変数いらなくて便利ですね。ただ、古いjavascriptでは対応していないみたいですが。。。

前の記事:
PVにも質ってあると思うんだ
次の記事:
管理しないというパスワード管理