如何推进多维关联数组

时间:2013-06-10 17:26:33

标签: javascript jquery

我在页面上循环浏览一些HTML表单元素。

var itemsArray = new Array();
$('input[type="text"].qty').each(function(index) {
    if($(this).val()) {
        itemsArray[index]['qty'] = $(this).val();
        itemsArray[index]['itemPrice'] = $(this).parents('.control-group').find('.itemPrice').val();
        itemsArray[index]['itemID'] = $(this).parents('.control-group').find('.itemID').val();
    }
});

index我希望是0,1,2,3等...就像常规数组一样。将子元素关联起来并分配给各种值。

我在控制台中收到此错误。

TypeError: itemsArray[index] is undefined

3 个答案:

答案 0 :(得分:6)

在开始使用它之前,您需要确保外部数组中的每个项都已初始化。注意,为了清楚起见,我在下面改为对象符号。

$('input[type="text"].qty').each(function(index) {
    if($(this).val()) {
        itemsArray[index] = {};
        itemsArray[index].qty = $(this).val();
        itemsArray[index].itemPrice = $(this).parents('.control-group').find('.itemPrice').val();
        itemsArray[index].itemID = $(this).parents('.control-group').find('.itemID').val();
    }
});

答案 1 :(得分:3)

考虑使用一组对象。 Javascript中的数组并不是真正用于您的方式(多维部分)。 itemsArray = []也优先于new Array()

var itemsArray = [];
$('input[type="text"].qty').each(function(index) {
    if($(this).val()) {
        itemsArray.push({
            qty : $(this).val(),
            itemPrice :  $(this).parents('.control-group').find('.itemPrice').val(),
            itemID : $(this).parents('.control-group').find('.itemID').val()
        });

    }
});

答案 2 :(得分:1)

这意味着它所说的。 itemsArray[index]undefined,您无法为此指定属性。请注意,您没有“多维数组”,只有对象的数组。对于每个新index,您需要创建一个新对象。

var $this = $(this);
if ($this.val()) {
    var $parent = $(this).parents('.control-group'); // .closest() should suffice
    itemsArray[index] = {
        qty: $this.val(),
        itemPrice: $parent.find('.itemPrice').val(),
        itemID: $parent.find('.itemID').val()
    };
}