Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Jquery中创建一个多数组,给出错误_Javascript_Jquery_Arrays_Object - Fatal编程技术网

Javascript 在Jquery中创建一个多数组,给出错误

Javascript 在Jquery中创建一个多数组,给出错误,javascript,jquery,arrays,object,Javascript,Jquery,Arrays,Object,我想使用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'] = jQue

我想使用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();
})
这给了我一个错误:

未捕获的TypeError:无法设置未定义的属性“name”


如何存储数据?请帮助我并提前感谢。

您需要先将数组中的每个项初始化为一个对象:

GiftData["boxProduct"][i] = {};
GiftData["boxProduct"][i]['name'] = jQuery(this).find('.prod-name').text();
GiftData["boxProduct"][i]['num'] = jQuery(this).find('.prod-num').text();

首先,
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()
};

由于“一切都是对象”,我想从技术上讲,您可以设置一个命名道具并将其指向另一个数组,但如果我没有遗漏某些内容,那么它就没有多大意义。没问题@Ranjit,如果我的答案解决了您的问题,请单击我答案左侧的灰色勾号,将其标记为已接受。