Во-первых, GiftData
- это массив, поэтому вы не можете установить именованное свойство внутри него, как пытается сделать GiftData['boxProduct'] = [];
.Чтобы это работало, GiftData
должен быть объектом.
Во-вторых, вам нужно определить объект на GiftData["boxProduct"][i]
, прежде чем устанавливать его свойства:
GiftData = {};
GiftData['boxProduct'] = [];
GiftData['boxName'] = jQuery('#giftbox-data .box-data').text();
$('#giftbox-data .prod-data .product').each( function(i) {
GiftData["boxProduct"][i] = {};
GiftData['boxProduct'][i]['name'] = jQuery(this).find('.prod-name').text();
GiftData['boxProduct'][i]['num'] = jQuery(this).find('.prod-num').text();
});
Это, как говоритсяэто можно сделать более кратко, объединив определение объекта и установщики свойств:
GiftData = {
boxProduct: [],
boxName: $('#giftbox-data .box-data').text();
};
$('#giftbox-data .prod-data .product').each( function(i) {
GiftData["boxProduct"][i] = {
name: $(this).find('.prod-name').text();
num: $(this).find('.prod-num').text();
};
});
Если пойти еще дальше, вы можете использовать map()
вместо each()
для построения массива:
GiftData = {
boxName: $('#giftbox-data .box-data').text(),
boxProduct = $('#giftbox-data .prod-data .product').map(function() {
return {
name: $(this).find('.prod-name').text();
num: $(this).find('.prod-num').text();
};
}).get()
};