1

我正在使用 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});

这仅在第一次时有效,以后任何时候我都会出错并且数组的长度变为 1。我确定这是因为我缺少方括号,但如果我尝试:

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

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

4

1 回答 1

1

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

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

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

到:

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

但是,最好在有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
于 2019-12-20T15:39:37.070 回答