Ассоциативные массивы в JavaScript для JSON - PullRequest
0 голосов
/ 13 июля 2010

Я использую массив в качестве ассоциативного массива объектов, ключами которого являются идентификационные номера объектов в базе данных.Естественно, что тихие идентификаторы - это большие числа - это означает, что обычно массив длиной 10 ^ 4 содержит только 20 элементов в качестве действительных реальных объектов.

Я хочу отправить эти данные обратно на сервер, но какие бы плагины мне ни понадобились для преобразования js-объектов в JSON, я перепробовал их все, и все они создают строку JSON длиной 10 ^ 4.Столько данных не может быть отправлено обратно.

Мне нужен способ преобразования ассоциативного массива в JSON, отбрасывая неопределенные записи.
Есть предложения?

РЕДАКТИРОВАТЬ: Пример того, как выглядит мой массив: var myAssociativeArray = [undefined, undefined, undefined ...., someobject, некоторый другой объект ..., undefined, ... еще один ....]

Ответы [ 2 ]

1 голос
/ 13 июля 2010

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

JSON.stringify(root, function(k,v) 
{ 
  if(v instanceof Array) 
  { 
    var o = {}; 
    for(var ind in v) 
    { 
      if(v.hasOwnProperty(ind)) 
      { 
        o[ind] = v[ind]; 
      }
    } 
    return o; 
  } 
  return v; 
}); 
0 голосов
/ 13 июля 2010

Читая ваш вопрос, похоже, используете массив. Вот одно решение, чтобы получить только определенные записи массива (порядок не гарантирован).

Обратите внимание, что, поскольку это разреженный массив, который может доходить, например, до 10000, лучше перечислять только свойства, а не циклически перебрасывать их с 0 до 9999, так как большинство из них в любом случае будут неопределенными. Так что это лучше для производительности.

var definedEntries = {};

for(var prop in dataObject) {
    if(dataObject.hasOwnProperty(prop)) {
        definedEntries[prop] = dataObject[prop];
    }
}

Затем отправьте definedEntries на сервер.

...