按名称获取 cookie

新手上路,请多包涵

我有一个 getter 从 cookie 中获取值。

现在我有 2 个名称为 shares= 和名称为 obligations= = 的 cookie。

我想让这个 getter 只是为了从义务 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]);
    }
 }

原文由 user1395001 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 417
1 个回答

一种避免遍历数组的方法是:

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

演练

按标记拆分字符串将生成一个包含一个字符串(相同值)的数组,以防标记不存在于字符串中,或者生成一个包含两个字符串的数组,以防标记在字符串中找到。

第一个(左)元素是标记之前的字符串,第二个(右)元素是标记之后的字符串。

(注意:如果字符串以标记开头,则第一个元素是空字符串)

考虑到 cookie 的存储方式如下:

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

为了检索特定的 cookie 值,我们只需要获取“; {name}=”之后和下一个“;”之前的字符串。在我们进行任何处理之前,我们在 cookie 字符串前加上“;”,这样每个 cookie 名称(包括第一个)都包含在“;”和“=”中:

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

现在,我们可以先用“; {name}=”拆分,如果在 cookie 字符串中找到 token(即我们有两个元素),我们将以第二个元素结束,第二个元素是以我们的 cookie 值开头的字符串。然后我们将其从数组中拉出(即弹出),并重复相同的过程,但现在使用“;”作为令牌,但这次拉出左边的字符串(即移位)以获取实际令牌值。

原文由 kirlich 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题