Javascript 使用js cookie和JSON.parse从cookie中设置并获取数组

Javascript 使用js cookie和JSON.parse从cookie中设置并获取数组,javascript,cookies,js-cookie,Javascript,Cookies,Js Cookie,我使用JSCookie来存储数据并将其取回,我试图创建一个数组变量,但我很难保存它的格式。这是一个创建、检索、更改和保存cookie数据的过程,它可以工作,但只是第一次,因为我不能 // store array in cookie Cookies.set('points', '0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0', { expires: 30 }); // get data from cookie into a variable (becomes a st

我使用JSCookie来存储数据并将其取回,我试图创建一个数组变量,但我很难保存它的格式。这是一个创建、检索、更改和保存cookie数据的过程,它可以工作,但只是第一次,因为我不能

// store array in cookie  
Cookies.set('points', '0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0', { expires: 30 });

// get data from cookie into a variable (becomes a string)  
points = Cookies.get('points');

// convert to object with (length 12)
points = JSON.parse("[" + points + "]");

// change value of the array in the varable position
points[playerId]++;

// save data in cookie
Cookies.set('points', points, {expires: 30});
这只适用于第一次,以后任何时候出现错误,数组变为长度1。我确信这是因为我缺少方括号,但如果我尝试:

Cookies.set('points', '[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]', { expires: 30 });

该变量变为长度为1的对象,但不起作用。

第二次失败的原因是传递给
Cookies。将
数组设置为第二个参数,并假设它将在cookie中以逗号分隔的字符串结束。但是在这种情况下,JSCookie将通过添加方括号来转换为字符串

因此,最快的解决方案是改变这一点:

Cookies.set('points', points, {expires: 30});
致:

但是,最好使用
JSON.stringify
JSON.parse
进行编码和解码,而不用“自己”进行任何字符串操作,如下所示:

var points = Array(12).fill(0);
Cookies.set('points', JSON.stringify(points), { expires: 30 });
var points = JSON.parse(Cookies.get('points'));
points[0]++;
Cookies.set('points', JSON.stringify(points), {expires: 30});
// ...etc

试试JSON.stringify(points);在调用Cookie.settryed之前,但仍然获取长度1。如果我尝试
var points=JSON.parse(Cookies.get('points')
我在控制台中的JSON数据的第1行第1列得到了
语法错误:JSON.parse:意外字符,我认为这是因为方括号,其余的都可以工作。如果您从零开始,使用我提供的最后一个代码块,确保在任何
Cookies.get
之前执行
Cookes.set
,它将毫无差错地工作。方括号是JSON符号的一部分,所以这不是问题所在。您可以随时检查
Cookies.get('points')
的值,而无需执行
JSON.parse
,这样您就可以看到有问题的值是什么。
var points = Array(12).fill(0);
Cookies.set('points', JSON.stringify(points), { expires: 30 });
var points = JSON.parse(Cookies.get('points'));
points[0]++;
Cookies.set('points', JSON.stringify(points), {expires: 30});
// ...etc