名前でクッキーを取得する 質問する

名前でクッキーを取得する 質問する

クッキーから値を取得するためのゲッターがあります。

今、私は という名前shares=と という名前で2 つのクッキーを持っていますobligations=

このゲッターは、義務 Cookie から値を取得するためだけに作成したいと思います。

これをどうやって行うのでしょうか?forデータを個別の値に分割し、配列に格納します。

 function getCookie1() {
    // What do I have to add here to look only in the "obligations=" cookie? 
    // Because now it searches all the cookies.

    var elements = document.cookie.split('=');
    var obligations= elements[1].split('%');
    for (var i = 0; i < obligations.length - 1; i++) {
        var tmp = obligations[i].split('$');
        addProduct1(tmp[0], tmp[1], tmp[2], tmp[3]);
    }
 }

ベストアンサー1

配列の反復処理を回避する 1 つのアプローチは次のようになります。

function getCookie(name) {
  const value = `; ${document.cookie}`;
  const parts = value.split(`; ${name}=`);
  if (parts.length === 2) return parts.pop().split(';').shift();
}

ウォークスルー

文字列をトークンで分割すると、文字列内にトークンが存在しない場合は 1 つの文字列 (同じ値) を含む配列が生成され、文字列内にトークンが見つかった場合は 2 つの文字列を含む配列が生成されます。

最初の (左) 要素はトークンの前の文字列であり、2 番目の (右) 要素はトークンの後の文字列です。

(注意: 文字列がトークンで始まる場合、最初の要素は空の文字列になります)

クッキーは次のように保存されます。

"{name}={value}; {name}={value}; ..."

特定の Cookie 値を取得するには、「; {name}=" の後、次の「;」の前の文字列を取得する必要があります。処理を行う前に、Cookie 文字列の先頭に「;」を付加して、最初の Cookie 名を含むすべての Cookie 名が「;」と「="」で囲まれるようにします。

"; {name}={value}; {name}={value}; ..."

ここで、まず「; {name}=」で分割し、トークンが Cookie 文字列内に見つかった場合 (つまり、要素が 2 つある場合)、2 番目の要素は Cookie 値で始まる文字列になります。次に、それを配列から取り出し (つまり、ポップ)、同じプロセスを繰り返しますが、今度は「;」をトークンとして使用し、今度は左側の文字列を取り出して (つまり、シフト)、実際のトークン値を取得します。

おすすめ記事