URIエンコードされたクエリ文字列を生成する1行のjavascript関数

メモ的エントリ。
GETしたりPOSTしたりする場面でしょっちゅうURIエンコードされたクエリ文字列の生成が必要だったりすので関数書いてみた。配列内包表記を使ったら1行で書けた。firefox用でしか動作確認してない。IEでは動かないはず。

function makeParam(a) 
  [(enc=encodeURIComponent)(i)+"="+enc(a[i]) for (i in a)].join('&')

使い方:

makeParam({
  hoge: "fuga",
  moge: "muga"
});
// => hoge=fuga&moge=muga

配列に対応してみる

配列(同じパラメタ名の連続)に対応してなかったので改良。

function makeParam(a) 
  [a[i] instanceof Array ? a[i].map(function(b) makeParam(eval('({"' + i + '":"' + b + '"})'))).join('&') : i+"="+encodeURIComponent(a[i]) for (i in a)].join('&')

さすがに見づらいので改行を入れてみる。

function makeParam(a) 
  [ 
    a[i] instanceof Array 
      ? a[i].map(function(b) makeParam(eval('({"' + i + '":"' + b + '"})'))).join('&') 
      : i+"="+encodeURIComponent(a[i]) 
    for (i in a) 
  ].join('&')

使い方

makeParam({
  hoge: "fuga",
  moge: "muga",
  foo: ["bar", "baz", "bee"]
});
// => hoge=fuga&moge=muga&foo=bar&foo=baz&foo=bee