Javascript 当我将document.cookie转换为数组,然后将条件语句与indexof一起使用时,它只适用于第一个值。为什么?

Javascript 当我将document.cookie转换为数组,然后将条件语句与indexof一起使用时,它只适用于第一个值。为什么?,javascript,Javascript,甚至很难描述这个问题。我不能复制一个片段,显然是因为它需要使用cookies,但我会尝试使用普通数组复制它,并向您展示它应该如何工作,然后我会向您展示我的代码截图,以及它在真实cookies上使用时产生的结果 函数cookiename(名称){ //var test5=document.cookie.split(“;”); var test5=[“user=Jim Jordan”,“color=blue”,“cat=bella”,“username=NikoaTesla”]; var user

甚至很难描述这个问题。我不能复制一个片段,显然是因为它需要使用cookies,但我会尝试使用普通数组复制它,并向您展示它应该如何工作,然后我会向您展示我的代码截图,以及它在真实cookies上使用时产生的结果

函数cookiename(名称){
//var test5=document.cookie.split(“;”);
var test5=[“user=Jim Jordan”,“color=blue”,“cat=bella”,“username=NikoaTesla”];
var username2=名称;
var输出=”;
if(test5[0].indexOf(“用户”)==0{
output=test5[0]。子字符串(username2.length,test5[0].length);
}else警报(“它不工作”);
警报(输出);
}

cookiename(“用户”)您想要的是找到以
名称开始的cookie,对吗

首先,您可能知道,但值得注意的是,如果您的cookie是这样来的:
cookies=“user=Jim Jordan;color=blue;cat=bella;username=NikoaTesla”,您必须拆分为
“;”
,而不仅仅是
“;”

一旦拆分正确,并且已经没有任何前导空格,您只需要:

test5.filter(c=>c.trim().startsWith("user"));
我相信使用
startsWith
比使用
indexOf
更干净

另一种解决方案,无需拆分:

对于
“;”
案例:

const cookiestr='; '+cookies+';';
while (true) { i=cookiestr.indexOf('; user',i+1); if (i<0) break; console.log(cookiestr.substring(i+2,cookiestr.indexOf(';',i+1))); }
const cookiestr=';'+cookies+';';
while (true) { i=cookiestr.indexOf(';user',i+1); if (i<0) break; console.log(cookiestr.substring(i+1,cookiestr.indexOf(';',i+1))); }

您的方法是有缺陷的,因为您希望cookie始终处于相同的顺序。您还将检查字符串equals的开头。当您有用户时,它也将匹配用户名。您没有考虑
=
,也没有删除编码

因此,要使用indexOf和substring的方法执行此操作,您需要循环并检查它是否匹配

函数getCookie(键){
//var mycokies=document.cookie.split(/;\s?/g);
var myCookies=[“user=Jim%20Jordan”,“color=blue”,“cat=bella”,“username=NikoaTesla”];
对于(var i=0;ilog('funky',getCookie('funky')在您的条件中,test5[2]=“cat=bella”,而不是“username=NikolaTesla”。这是索引3。你能试试吗?

还要检查每个字符串的前端是否添加了空格,就像前面提到的那样。

有很多脚本可以读取cookies,为什么要重新发明轮子?我不是。我现在正在学习阅读饼干,我正在做实验。你能帮我理解我的代码有什么问题吗?这是我的代码中的问题,还是其他问题?它应该能工作,但不能。我想了解为什么.console.log()是您的朋友。不确定您的代码有什么问题,除了您没有考虑
=
和Cookie已编码之外,因此您没有考虑删除该代码。另一个问题是,如果用户名在用户之前,代码将失败。用户将匹配用户名您的方法有缺陷,因为您希望cookie始终处于相同的顺序。您还将检查字符串equals的开头。当您有用户时,它也将匹配用户名。您没有考虑
=
,也没有删除编码。console不会产生任何错误。我知道我没有考虑
=
。您在截图中看到的代码是原始代码的精简版本。我必须去掉不必要的部分,只向你展示与我的问题相关的部分。为什么
indexof(“用户名”)
test5[2]
不匹配
username
是第一个字符串,但不匹配。更奇怪的是0和-1都不匹配。为什么?你有什么想法吗?我还没有学习过
startsWith
方法。现在,我的问题是,为什么只有第一个值起作用,而其他值不起作用。我想了解我的代码有什么问题。这毫无意义,它应该会起作用。我正在匹配一个存在的字符串,但条件不匹配。你知道我的代码有什么问题吗?请看下面的截图。第一个片段演示了一个数组,而不是实际的document.cookies对象。在下面的屏幕截图中,当我更改
indexof
字符串时,它位于实际的
document.cookie
上,我插入一个警报,在
if条件之前显示
test5[2]
的值,以便您可以看到它是
username=sam jones
。原始document.cookie数组的第二个值是
username=sam jones