Моим первоначальным импульсом было преобразовать его непосредственно в JSON , но потом я понял, что JSON.stringify()
вернет что-то вроде этого:
["apple",null,null,"pineapple",null,null,null,null,null,null,null,null,"car",null,null,null,null,null,null,null,null,"apple",null,null,null,null,null,null,null,null,null,null,null,"dog",null,null,null,null,null,null,null,"cat"]
Поскольку в вашем массиве есть кучанеопределенные слоты, которые становятся null
, потому что JSON не поддерживает неопределенные значения.Что было бы хорошо, если бы вам просто нужно было сохранить его, за исключением того момента, когда вы конвертируете его обратно в массив, вы получите нулевые значения везде вместо неопределенных, так что вам придется это учитывать (не имеет большого значения), но в любом случаеесли это звучит так, как будто вы хотите, чтобы он был удобочитаемым человеком.
Поэтому вместо этого я предлагаю вам преобразовать его в объект, а затем преобразовать объект в JSON, используя JSON.stringify()
.Чтобы преобразовать его обратно, вы используете JSON.parse()
, чтобы превратить вашу строку в объект, а затем переберите свойства объекта для создания разреженного массива.
То, что я предлагаю, будетрезультат в виде строки JSON:
{"0":"apple","3":"pineapple","12":"car","21":"apple","33":"dog","41":"cat"}
Код:
function sparseArrayStringify(arr) {
var obj = {},
i;
for (i=0; i < arr.length; i++)
if (typeof arr[i] != "undefined")
obj[i] = arr[i];
return JSON.stringify(obj);
}
function parseToSparseArray(str) {
var arr = [],
obj = JSON.parse(str),
k;
for (k in obj)
arr[k] = obj[k];
return arr;
}
var stringifiedArray = sparseArrayStringify(Ar); // where Ar is your array
// and change it back
var anArray = parseToSparseArray(stringifiedArray);
Рабочая демонстрация: http://jsfiddle.net/XXqVD/
Примечание: в моем parseToSparseArray()
функция Я не потрудился проверить, что свойства объекта в анализируемой строке на самом деле являются неотрицательными целыми числами, но вы можете добавить это при желании.
Более новые браузеры поддерживают объект JSON
с ассоциированнымметоды, или для более старых браузеров вы можете включить библиотеку json2.js
.
Кстати, код в вашем вопросе является недопустимым JavaScript: вы не можете объявлять переменные с типом вJS.Смотрите примеры в моем коде, чтобы узнать, как объявлять массивы, объекты и т. Д.
РЕДАКТИРОВАТЬ: ОК, я не знаю, с какой стати вы захотите использовать не-JSON-версию, когда JSON являетсяхорошо известный стандартный формат, но вот некоторые непроверенные функции, которые читают и записывают точно формат из вопроса:
"0-Apple,3-pineapple,12-car,33-dog,41-cat,21-apple"
Обратите внимание, что предложенный формат не будет работать, если какой-либо изэлементы массива содержат запятые или дефисы. Вот почему JSON - это то, что вам нужно.В любом случае:
function serialiseArray(arr) {
var workingArray = [],
i;
for (i=0; i < arr.length; i++)
if (typeof arr[i] != "undefined")
workingArray.push(i + "-" + arr[i]);
return workingArray.join(",");
}
function deserialiseArray(str) {
var arr = [],
items = str.split(","),
item,
i;
for (i=0; i < items.length; i++) {
item = items[i].split("-");
arr[item[0]] = item[1];
}
return arr;
}