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 でテストかいたことないから忘れてた。

まあ

素直にライブラリがあればそれを使うほうがいい。パースってめんどい。でもこういう愚直なプログラミングは基礎としては学習になる。