Как правильно хранить массив в куки и добавлять новые данные в этот массив?

Столкнулся с проблемой. Нужно написать таблицу лидеров (Имя, время, счет), таблица состоит из 10 человек. Я формирую массив с именем, временем и счетом, далее записываю его в куки:

var array = [input.value,timer.lastTime(),score];
var winnersList = getCookie('winnersList');
winnersList = winnersList.concat(JSON.stringify(array));
setCookie('winnersList', winnersList);

Но это все работает не так как нужно, далеко не так. Первая проблема: не могу нормально перевести обычный массив в JSON, в консоли все это проделываю: выходит такой же результат ['Name','time','score'], после попытки добавить к этому массиву еще один массив, и прогоняя через JSON.stringify я не могу все равно работать с этим массивом, как с обычным js массивом. Распарсить его не удается.

Голова уже кипит, перелистал кучу подобных вопросов, сама проблема, как по мне довольно тривиальна, но мучаюсь уже 30 минут. Как правильно добавить массив в куки, потом к этому же массиву добавить еще один кусок и снова записать в куки, чтобы потом можно было спокойно его достать из кук и обработать?
  • Вопрос задан
  • 1633 просмотра
Решения вопроса 1
bubandos
@bubandos
bash'у, javascript'ую, php'лю, css'аю, html'каю
Вы, вообще, сами пробовали посмотреть. что вы делаете?
stringify делает из вашего массива - json-строку, а вы ее объединяете со строкой куков... которая, вообще, не известно чем у вас является.
Вообще, в вашем случае, лучше хранить не в куках, а в localStorage, так как куки - максимум 4Kb.
А чтобы нормально парсилось, вам нужно не в строку конкатить строку массива, а в строку собирать массив массивов.
Да и функции getCookie/setCookie неплохо было бы привести.

Если отсюда: https://learn.javascript.ru/cookie, то можно сделать так:

// есл использовать такую геткуку, будет работать так
function getCookie(name) {
  var matches = document.cookie.match(new RegExp(
    "(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
  ));
  return matches ? decodeURIComponent(matches[1]) : '[]';
}

var array = [input.value,timer.lastTime(),score];
var winnersList = JSON.parse(getCookie('winnersList')) || []; 
winnerList = winnerList.concat([array]); // вот тут у вас массив теперь будет всегда.
setCookie('winnerList', JSON.stringify(winnerList)); // а вот тут у вас сохранились корректно куки
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы