URLSearchParams という便利な機能が増えてた
- カテゴリ:
- JavaScript
- コメント数:
- Comments: 0
◆ URLSearchParams が便利
◆ URL オブジェクトの searchParams プロパティからも使える
◆ URL オブジェクトの searchParams プロパティからも使える
いつのまにか URLSearchParams という機能が使えるようになってました
調べてみると Chrome 49 からのようです
結構前ですね
URL のオブジェクトにはありますが location のオブジェクトにはこのプロパティはありません
ですが簡単に searchParams を作ることはできます
最初に 「?」 がついてても大丈夫です
他にも色々な形式が使えます
オブジェクトでかけるのは便利ですね
ただ クエリパラメータは 1 つのキーに複数の値を結び付けられますが オブジェクト形式だと 1 つのみになります
新しい値に置き換えられます
append にすれば「追加」することができます
get だと複数あっても 1 つ目だけを返します
getAll だと 1 つだけでも配列で返します
getAll でもキー指定が必要で本当に全部のパラメータを取得することはできません
その用途だと entries か toString を使います
配列メソッドと違ってコールバックで制御はできません
URL を正規化してキャッシュしやすくしたりする目的で使えます
調べてみると Chrome 49 からのようです
結構前ですね
URL オブジェクト
URL のオブジェクトに searchParams というプロパティが追加されていて クエリパラメータを簡単に扱えますconst url = new URL("http://var.blog.jp/page1.html?query=1&qqq=aaa&foo=bar")
const params = url.searchParams
// URLSearchParams {}
params.toString()
// "query=1&qqq=aaa&foo=bar"
params.append("xxxx", "yyy")
params.delete("qqq")
params.toString()
// "query=1&foo=bar&xxxx=yyy"
url.href
// "http://var.blog.jp/page1.html?query=1&foo=bar&xxxx=yyy"
const params = url.searchParams
// URLSearchParams {}
params.toString()
// "query=1&qqq=aaa&foo=bar"
params.append("xxxx", "yyy")
params.delete("qqq")
params.toString()
// "query=1&foo=bar&xxxx=yyy"
url.href
// "http://var.blog.jp/page1.html?query=1&foo=bar&xxxx=yyy"
URL のオブジェクトにはありますが location のオブジェクトにはこのプロパティはありません
ですが簡単に searchParams を作ることはできます
new URL(location).searchParams
コンストラクタ
クエリパラメータのみ使いたいならいきなり URLSearchParams コンストラクタに入れることもできますnew URLSearchParams(location.search)
最初に 「?」 がついてても大丈夫です
他にも色々な形式が使えます
new URLSearchParams({a:1, b:2})
new URLSearchParams([["a", 1], ["b", 2]])
new URLSearchParams("a=1&b=2")
new URLSearchParams([["a", 1], ["b", 2]])
new URLSearchParams("a=1&b=2")
オブジェクトでかけるのは便利ですね
const base_url = "http://var.blog.jp/"
const new_url = base_url + new URLSearchParams({
x: 100,
y: 200,
}).toString()
new_url
// "http://var.blog.jp/x=100&y=200"
const new_url = base_url + new URLSearchParams({
x: 100,
y: 200,
}).toString()
new_url
// "http://var.blog.jp/x=100&y=200"
ただ クエリパラメータは 1 つのキーに複数の値を結び付けられますが オブジェクト形式だと 1 つのみになります
メソッド
単純な append/delete 以外にもいくつかのメソッドがありますset
set を使うとキーに対する値は 1 つだけです新しい値に置き換えられます
append にすれば「追加」することができます
const params = new URLSearchParams()
params.set("a", 1)
params.toString()
// "a=1"
params.set("a", 2)
params.toString()
// "a=2"
params.append("a", 3)
params.toString()
// "a=2&a=3"
params.set("a", 1)
params.toString()
// "a=1"
params.set("a", 2)
params.toString()
// "a=2"
params.append("a", 3)
params.toString()
// "a=2&a=3"
has
キーを引数に ひとつでもあれば true を返しますget/getAll
キーを指定して値を取得しますget だと複数あっても 1 つ目だけを返します
getAll だと 1 つだけでも配列で返します
getAll でもキー指定が必要で本当に全部のパラメータを取得することはできません
その用途だと entries か toString を使います
const params = new URLSearchParams("a=3&b=0&a=1&a=2")
params.get("a")
// "3"
params.getAll("a")
// ["3", "1", "2"]
params.getAll("b")
// ["0"]
params.get("a")
// "3"
params.getAll("a")
// ["3", "1", "2"]
params.getAll("b")
// ["0"]
toString
最終的にビルドした結果を取得するときに使いますsort
キーの順を昇順に並び替えます配列メソッドと違ってコールバックで制御はできません
URL を正規化してキャッシュしやすくしたりする目的で使えます
const params = new URLSearchParams("a=3&b=0&a=1&a=2")
params.sort()
params.toString()
// "a=3&a=1&a=2&b=0"
params.sort()
params.toString()
// "a=3&a=1&a=2&b=0"
keys/values/entries
各種イテレータを返しますconst params = new URLSearchParams("a=3&b=0&a=1&c=2")
;[...params.keys()]
// ["a", "b", "a", "c"]
;[...params.values()]
// ["3", "0", "1", "2"]
;[...params.entries()]
// [ ["a", "3"], ["b", "0"], ["a", "1"], ["c", "2"] ]
;[...params.keys()]
// ["a", "b", "a", "c"]
;[...params.values()]
// ["3", "0", "1", "2"]
;[...params.entries()]
// [ ["a", "3"], ["b", "0"], ["a", "1"], ["c", "2"] ]