使用 js-cookie 和 JSON.parse 从 cookie 设置和获取数组

Art*_*mis 5 javascript cookies js-cookie

我正在使用 js-cookie 来存储数据并取回数据,我试图破坏数组变量,但在维护其格式时遇到困难。这是创建、检索、更改和保存 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});
Run Code Online (Sandbox Code Playgroud)

这仅在第一次有效,任何后续时间我都会收到错误并且数组长度变为1。我确信这是因为我缺少方括号,但如果我尝试:

Cookies.set('points', '[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]', { expires: 30 });
Run Code Online (Sandbox Code Playgroud)

该变量变成长度为 1 的对象并且不起作用。

tri*_*cot 4

第二次失败的原因是您将Cookies.set数组作为第二个参数传递给数组,并假设这最终将在 cookie 中作为逗号分隔的字符串。但在这种情况下,js-cookie 会通过添加方括号来转换为字符串。

所以非常快速的解决方案是改变这一点:

Cookies.set('points', points, {expires: 30});
Run Code Online (Sandbox Code Playgroud)

到:

Cookies.set('points', points.toString(), {expires: 30});
Run Code Online (Sandbox Code Playgroud)

但是,最好“自己”进行JSON.stringifyJSON.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
Run Code Online (Sandbox Code Playgroud)