【问题标题】:Create a multi array in Jquery giving error在 Jquery 中创建一个多数组给出错误
【发布时间】:2019-06-11 08:51:10
【问题描述】:

我想使用 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();
})

它给了我一个错误:

未捕获的类型错误:无法设置未定义的属性“名称”

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

【问题讨论】:

    标签: javascript jquery arrays object


    【解决方案1】:

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

    【讨论】:

    • 既然一切都是对象,我猜你在技术上可以设置一个命名的道具并将其指向另一个数组,但无论如何,如果我错过了一些东西,这将没有多大意义。
    【解决方案2】:

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

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

    【讨论】:

    • 没问题@Ranjit,如果我的回答解决了您的问题,请通过单击我的回答左侧的灰色刻度标记将其标记为已接受。
    猜你喜欢
    • 2019-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多