Реализации JSON, которые обрабатывают разреженные массивы
Мне нужно знать, могут ли какие-либо реализации JSON обрабатывать разреженные массивы к моему удовлетворению. Я видел вопрос: как представить разреженный массив в JSON? но использование объекта вместо массива не вариант для меня; Мне нужен массив.
Мое минимальное требование заключается в том, чтобы реализация заполняла все пробелы с помощью "undefined". В противном случае я пишу защитный код, который сам заполняет пробелы, до кодирования JSON.
2 ответа
Невозможно. Забудьте реализации, это просто не допускается в спецификации.
Массивы определяются только по значению. Объекты предназначены для того, когда индекс / ключ имеет значение.
Не могли бы вы использовать объект, в котором имя свойства было индексом, а значение свойства было значением, а затем запустить его через посредническую функцию для создания разреженного массива?
function getSparseArray(obj) {
var ary = [];
for (prop in obj) {
var i = parseInt(prop,10);
if (!isNaN(i)) {
ary[i] = obj[prop];
}
}
return ary;
}
Вы бы отправили что-то вроде
{ "5":"Five", "11":"Eleven", "99":"Ninety-Nine"}
и получить обратно массив, который был заполнен всего тремя значениями:
ary[5] = "Five"
ary[11] = "Eleven"
ary[99] = "Ninety-Nine"
ary[0] = 'undefined'
ary[98] = 'undefined'
etc.
ary
здесь будет иметь длину 100, но это будет "разреженный" массив в вашем смысле.