Сохранить массив как переменную, а затем преобразовать обратно в массив - PullRequest
0 голосов
/ 04 января 2012

Я делаю игру на javascript, но (не на основе браузера), но в движке, который я использую, есть ошибка, заключающаяся в удалении сохраненных массивов при выходе из игры.Итак, чтобы передать, что я хочу сохранить свои массивы как переменные, а затем при загрузке игры преобразовать их обратно в массивы.

На данный момент моя игра имеет только 1 массив.Кто-то предложил этот код, но он не работает должным образом: когда я запускаю скрипт для печати каждого элемента массива в отдельной строке, он печатает первый элемент в первой строке, а затем во второй строке печатает остальные, как этот: element1, element2, element3 Вот код, который предложил человек:

Этот код запускается каждый раз, когда обновляются массивы.В данном случае массив имеет значение «QuestsActive», а переменная, в которой он хранится, - «QuestActiveVar».

  questsActiveVar = questsActive.toString();
  questsActiveVar = questsActiveVar.replace(",", "\",\"");
  questsActiveVar = "questsActive=new Array(\"".concat(questsActiveVar,"\")");

Он запускается при загрузке игры;воссоздает массив, который был удален

  eval(questsActiveVar);

Ответы [ 3 ]

1 голос
/ 04 января 2012

Не уверен, что я понимаю проблему, но почему вы хотите сохранить часть javascript, если вам нужно хранить только данные? Я бы посоветовал вам сохранить в своем хранилище JSON-строку массива, а затем при загрузке проанализировать его как массив.

Код должен выглядеть так:

var questsActiveVar = JSON.stringify(questsActive);
// questsActiveVar can be stored anywhere as a string

И загрузить его:

var questsActive = JSON.parse(questsActiveVar);

В этом случае вы можете хранить еще более сложные переменные с запятыми, подмассивами и т. Д.

1 голос
/ 04 января 2012

Чтобы создать массив из string в javascript, вам нужно использовать функцию .split(). Вот пример:

var someStr = 'item1, item2, item3';
var array   =  someStr.split(',');   // place any character in here to split on
alert(array[0]);                     // => item1

Исходя из того, что я понимаю в вашем контексте, я бы просто сохранил переменную questsActiveVar, а затем .split(), когда игра загрузится снова.

0 голосов
/ 04 января 2012

Вы заменяете только первый элемент вызовом замены.

Попробуйте это:

questsActiveVar = questsActiveVar.replace(/,/g, "\",\"");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...