使用 js-cookie 和 JSON.parse 从 cookie 中设置和获取数组
Set and Get array from cookies with js-cookie and JSON.parse
我正在使用 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 的对象,它不起作用。
第二次失败的原因是您将一个数组作为第二个参数传递给 Cookies.set
,并假设这最终将作为 cookie 中的逗号分隔字符串。但是 js-cookie 在这种情况下会通过添加方括号来转换为字符串。
所以非常快速的解决方案是改变这个:
Cookies.set('points', points, {expires: 30});
至:
Cookies.set('points', points.toString(), {expires: 30});
但是,最好用JSON.stringify
和JSON.parse
编码和解码而不做任何字符串操作"yourself",像这样:
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
我正在使用 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 的对象,它不起作用。
第二次失败的原因是您将一个数组作为第二个参数传递给 Cookies.set
,并假设这最终将作为 cookie 中的逗号分隔字符串。但是 js-cookie 在这种情况下会通过添加方括号来转换为字符串。
所以非常快速的解决方案是改变这个:
Cookies.set('points', points, {expires: 30});
至:
Cookies.set('points', points.toString(), {expires: 30});
但是,最好用JSON.stringify
和JSON.parse
编码和解码而不做任何字符串操作"yourself",像这样:
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