Cookieの値に = が入っているときの自前パース
たぶんそれ jQuery.cookie でできるよ
と思うけど、今回は jQuery が使えない(使えなくはないがそれだけのためにjQueryをいれたくない)という状況だし、小さな処理なので自前実装した。
具体的な文字列
こんな感じの value からある key のときの値を取り出す
var cookie = 'service=twiter; time=1234; x_key=dkasfajlkafjaWlkaQo=--akjfalasdfa9af'
この場合 x_key の値が欲しい
最初思いついたこと
ちょっと違うかもだけどこんな感じ
var ary = cookie.split(";"); for (var elem in ary){ var k_v = ary[elem].split("="); var s = ""; // for ループを1から始める for (var i = 1; i < k_v.length; i++){ s += k_v[i]; } ... }
split("=")して for ループを1から始めてそれをつなげばよかったと思った。でもこれだと[x_key, val1, val2] となってしまい、つまり文字列の = が消えてしまう問題があってすごく微妙になった。
結局こうした
indexOf と substring でゴリ押した
var ary = cookie.split(";"); for (var elem in ary){ // api_key の value に = が2つ以上ある場合があるので組み立てる var k_v = ary[elem].indexOf("="); var key = ary[elem].split("=")[0]; var value = ary[elem].substring(k_v + 1); if (key.replace(/\s/g, '') === "x_key"){ console.log("OK" + value); return value; } }
とても愚直なコードになった。けど、シンプルになった。
開発
ユニットテストではないけど、こういう機械的な処理のときはテストをかくようにあるいは対話環境みたいなのをつくってやったほうがやりやすい。当然といえば当然なんだけど、JavaScript でテストかいたことないから忘れてた。
まあ
素直にライブラリがあればそれを使うほうがいい。パースってめんどい。でもこういう愚直なプログラミングは基礎としては学習になる。