Создать мульти массив в Jquery, выдавая ошибку - PullRequest
2 голосов
/ 11 июня 2019

Я хочу создать массив с помощью jQuery.Это многомерный массив.Пожалуйста, проверьте код, написанный ниже.

GiftData = [];
GiftData['boxProduct'] = [];
GiftData['boxName'] = jQuery('#giftbox-data .box-data').text();
jQuery('#giftbox-data .prod-data .product').each( function(i) {
  GiftData['boxProduct'][i]['name'] = jQuery(this).find('.prod-name').text();
  GiftData['boxProduct'][i]['num'] = jQuery(this).find('.prod-num').text();
})

Это дает мне ошибку:

Uncaught TypeError: Невозможно установить свойство 'name' из неопределенного

Как я могу хранить данные?Пожалуйста, помогите мне и спасибо заранее.

Ответы [ 2 ]

1 голос
/ 11 июня 2019

Во-первых, 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()
};
1 голос
/ 11 июня 2019

Сначала нужно инициализировать каждый элемент массива объектом:

GiftData["boxProduct"][i] = {};
GiftData["boxProduct"][i]['name'] = jQuery(this).find('.prod-name').text();
GiftData["boxProduct"][i]['num'] = jQuery(this).find('.prod-num').text();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...