Я использую js-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 и не работает.

1
Artemis 20 Дек 2019 в 18:15

1 ответ

Лучший ответ

Причина, по которой он завершается с ошибкой во второй раз, заключается в том, что вы передаете Cookies.set массив в качестве второго аргумента, делая предположения, что это закончится как строка, разделенная запятыми, в файле cookie. Но js-cookie в этом случае выполнит преобразование в строку, добавив квадратные скобки.

Таким образом, очень быстрое решение состоит в том, чтобы изменить это:

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

Чтобы :

Cookies.set('points', points.toString(), {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
1
trincot 20 Дек 2019 в 15:39