2014-01-28 7 views
2

Посмотрите на множество примеров, но, похоже, не получается создать вложенный массив, чтобы хранить некоторые данные. Как я могу получить следующий код для работы? Это дает мне ошибку Сейчас:создание вложенного массива javascript

var shipdata = []; 

shipdata['header']['bedrijfsnaam'] = $('[name="bedrijfsnaam"]').val(); 
shipdata['header']['naam'] = $('[name="naam"]').val(); 
shipdata['header']['straat'] = $('[name="straat"]').val(); 
shipdata['header']['postcode'] = $('[name="postcode"]').val(); 
shipdata['header']['plaats'] = $('[name="plaats"]').val(); 
shipdata['header']['telefoon'] = $('[name="telefoon"]').val(); 
shipdata['header']['email'] = $('[name="email"]').val(); 
shipdata['header']['instructies'] = $('[name="instructies"]').val(); 
shipdata['header']['ordernummertje'] = $('[name="ordernummertje"]').val(); 

$(".pakketten").each(function(index, element) { 

      index++; 
      shipdata['pakketten']['pakket'+index]['lengte'] = $('[name="lengte'+index+'"]').val(), 
      shipdata['pakketten']['pakket'+index]['breedte'] = $('[name="breedte'+index+'"]').val(), 
      shipdata['pakketten']['pakket'+index]['hoogte'] = $('[name="hoogte'+index+'"]').val(), 
      shipdata['pakketten']['pakket'+index]['gewicht'] $('[name="gewicht'+index+'"]').val() 


     }); 

Вероятно, им делать это все неправильно, но некоторые указатели будут приветствоваться.

Спасибо!

+0

Похоже, что вы действительно хотите объект, массивы ссылаются по индексу, объекты имеют действительные пары ключ/вал. – tymeJV

+0

Это объект, а не массив. Javascript не имеет массивов со строковыми ключами. – gpgekko

+0

index ++ не требуется – Shanimal

ответ

4

Прежде всего, вы создаете объект, а не массив, поэтому используйте {} вместо [] для основного контейнера.

Во-вторых, при вставке нескольких значений в то же время, вы можете использовать гораздо более компактные обозначения:

var shipdata = { 
    'header': { 
    'bedrijfsnaam': $('[name="bedrijfsnaam"]').val(), 
    'naam': $('[name="naam"]').val() 
    '...': '...' 
    }, 
    'pakketten': [] 
}; 

$(".pakketten").each(function(index, element) { 
      shipdata['pakketten'].push({ 
       'lengte': $('[name="lengte'+index+'"]').val(), 
       'breedte': $('[name="breedte'+index+'"]').val(), 
       '...': '...' 
      }); 
}); 

Кроме того, в любое время вы хотите получить доступ к объекту или массив в любом случае, вы должны инициализировать это заранее, как уже упоминалось в @antyrat.

+0

, спасибо, что это работает, но могу ли я создать объект JSON из этого? Потому что теперь верхняя часть - это объект, а часть pakketten - это массив. – Snuur

+0

@Snuur Если вы хотите создать из него JSON-строку, не имеет значения, является ли контент массивом или объектом. В обоих случаях вы можете использовать 'JSON.stringify (shipdata)' для получения строки JSON. – Sirko

2

Вам нужно создать объекты каждый раз, когда вы хотите иметь вложенную массив:

var shipdata = {}; 
shipdata['header'] = {}; 
shipdata['header']['bedrijfsnaam'] = $('[name="bedrijfsnaam"]').val(); 
//... 

shipdata['pakketten'] = {}; 

$(".pakketten").each(function(index, element) { 

    index++; 
    shipdata['pakketten']['pakket'+index] = {}; 
    shipdata['pakketten']['pakket'+index]['lengte'] = $('[name="lengte'+index+'"]').val(), 
    // ... 

ответа обновленного из-за комментарии, как массивы не имеют строковые индексы.

Смежные вопросы