Реализации JSON, которые обрабатывают разреженные массивы - PullRequest
4 голосов
/ 16 апреля 2010

Мне нужно знать, могут ли какие-либо реализации JSON обрабатывать разреженные массивы, к моему удовлетворению. Я видел вопрос: Как представить разреженный массив в JSON? , но использование объекта вместо массива для меня не вариант; Мне нужен массив.

Моим минимальным требованием было бы заполнение пробелов с помощью "undefined". В противном случае я пишу защитный код, который сам заполняет пробелы, до кодирования JSON.

Ответы [ 2 ]

5 голосов
/ 16 апреля 2010

Не возможно. Забудьте реализации, это просто недопустимо в спецификации.

http://json.org/

Массивы определяются только по значению. Объекты предназначены для случаев, когда индекс / ключ имеет значение.

2 голосов
/ 16 апреля 2010

Не могли бы вы использовать объект, в котором имя свойства было индексом, а значение свойства было значением, а затем запустить его через посредническую функцию для создания разреженного массива?

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, но это будет "разреженный" массив в вашем смысле.

...