クッキーから値を取得するためのゲッターがあります。
今、私は という名前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 値で始まる文字列になります。次に、それを配列から取り出し (つまり、ポップ)、同じプロセスを繰り返しますが、今度は「;」をトークンとして使用し、今度は左側の文字列を取り出して (つまり、シフト)、実際のトークン値を取得します。