麻烦在javascript中制作数组

时间:2012-09-13 07:55:27

标签: javascript jquery

我在使用javascript制作数组时遇到了麻烦。首先,我这样做了

for(var i=1; i <= rowCount-1; i++)
    {  
        product[i-1] = [{
            'product_id' : $('#product_id' + i).val(),
            'name' : $('#item' + i).val(),
            'model' : $('#model' + i).val(),
            'reward' : $('#reward' +i).val(),
            'subtract' : $('#subtract' + i).val(),
            'minimum' : $('#minimum' + i).val(),
            'shipping' : $('#shipping' + i).val(),
            'tax_class_id' : $('#tax_class_id' + i).val(),
            'weight' : $('#weight' + i).val(),
            'quantity' : $('table.order-table tbody tr td.quantity input[name=\'quantity'+ i +'\']').val(),
            'price' : $('table.order-table tbody tr[id=\''+ i +'\']').find('td.price').html(),
            'total' : $('table.order-table tbody tr td.quantity input[name=\'quantity'+ i +'\']').parent().parent().find('td.total').html()
        }];
    }

在ajax帖子中将其作为参数传递后,我可以看到它将其作为

传递
product[0][0][minimum]  
product[0][0][model]    326
product[0][0][name] apple mac power
product[0][0][price]    100.0000
product[0][0][product_id]   50
product[0][0][quantity] 5
product[0][0][reward]   0
product[0][0][shipping] 1
product[0][0][subtract] 1
product[0][0][tax_class_i...    0
product[0][0][total]    500
product[0][0][weight]   0.00000000
product[1][0][minimum]  
product[1][0][model]    326
product[1][0][name] apple mac power
product[1][0][price]    100.0000
product[1][0][product_id]   50
product[1][0][quantity] 7
product[1][0][reward]   0
product[1][0][shipping] 1
product[1][0][subtract] 1
product[1][0][tax_class_i...    0
product[1][0][total]    700

但我想要这样的东西

product[0][name] = "apple mac power"

所以我将代码更改为

for(var i=1; i <= rowCount-1; i++)
{  
    product = [{
        'product_id' : $('#product_id' + i).val(),
        'name' : $('#item' + i).val(),
        'model' : $('#model' + i).val(),
        'reward' : $('#reward' +i).val(),
        'subtract' : $('#subtract' + i).val(),
        'minimum' : $('#minimum' + i).val(),
        'shipping' : $('#shipping' + i).val(),
        'tax_class_id' : $('#tax_class_id' + i).val(),
        'weight' : $('#weight' + i).val(),
        'quantity' : $('table.order-table tbody tr td.quantity input[name=\'quantity'+ i +'\']').val(),
        'price' : $('table.order-table tbody tr[id=\''+ i +'\']').find('td.price').html(),
        'total' : $('table.order-table tbody tr td.quantity input[name=\'quantity'+ i +'\']').parent().parent().find('td.total').html()
    }];
}

所以这样做之后它只显示1行数组,无论我有多少rowCount这样

product[0][minimum]  
product[0][model]    326
product[0][name] apple mac power
product[0][price]    100.0000
product[0][product_id]   50
product[0][quantity] 7
product[0][reward]   0
product[0][shipping] 1
product[0][subtract] 1
product[0][tax_class_i...    0
product[0][total]    700

任何人都可以帮助我。?

提前致谢..

3 个答案:

答案 0 :(得分:4)

您正在创建一个数组数组。取出第二个数组,如下所示:

for(var i=1; i <= rowCount-1; i++)
{  
    product[i-1] = {        // Removed array open
        'product_id' : $('#product_id' + i).val(),
        'name' : $('#item' + i).val(),
        'model' : $('#model' + i).val(),
        'reward' : $('#reward' +i).val(),
        'subtract' : $('#subtract' + i).val(),
        'minimum' : $('#minimum' + i).val(),
        'shipping' : $('#shipping' + i).val(),
        'tax_class_id' : $('#tax_class_id' + i).val(),
        'weight' : $('#weight' + i).val(),
        'quantity' : $('table.order-table tbody tr td.quantity input[name=\'quantity'+ i +'\']').val(),
        'price' : $('table.order-table tbody tr[id=\''+ i +'\']').find('td.price').html(),
        'total' : $('table.order-table tbody tr td.quantity input[name=\'quantity'+ i +'\']').parent().parent().find('td.total').html()
    };       // Removed array close
}

在JavaScript中,[]创建一个数组,因此[{object}]创建一个单元格数组。

另请注意,product [0] [“name”]与product [0] .name相同 - 在JavaScript中,属性也可用于索引语法。 product是您的数组,数组中的每个单元格都是一个对象,其属性包括name。

答案 1 :(得分:3)

在你的第一个版本中,你将数组分配给数组,它显示为2d数组。在第二个版本中,您始终将产品变量分配给新值,因此它只包含一个产品信息。因此,您可以通过删除[和]类似

来更新您的第一个版本
for(var i=1; i <= rowCount-1; i++)
{
    product[i-1] = {
        'product_id' : $('#product_id' + i).val(),
        'name' : $('#item' + i).val(),
        'model' : $('#model' + i).val(),
        'reward' : $('#reward' +i).val(),
        'subtract' : $('#subtract' + i).val(),
        'minimum' : $('#minimum' + i).val(),
        'shipping' : $('#shipping' + i).val(),
        'tax_class_id' : $('#tax_class_id' + i).val(),
        'weight' : $('#weight' + i).val(),
        'quantity' : $('table.order-table tbody tr td.quantity input[name=\'quantity'+ i +'\']').val(),
        'price' : $('table.order-table tbody tr[id=\''+ i +'\']').find('td.price').html(),
        'total' : $('table.order-table tbody tr td.quantity input[name=\'quantity'+ i +'\']').parent().parent().find('td.total').html()
    };
}

或者您可以将第二个版本修改为

for(var i=1; i <= rowCount-1; i++)
{  
    product.push({
        'product_id' : $('#product_id' + i).val(),
        'name' : $('#item' + i).val(),
        'model' : $('#model' + i).val(),
        'reward' : $('#reward' +i).val(),
        'subtract' : $('#subtract' + i).val(),
        'minimum' : $('#minimum' + i).val(),
        'shipping' : $('#shipping' + i).val(),
        'tax_class_id' : $('#tax_class_id' + i).val(),
        'weight' : $('#weight' + i).val(),
        'quantity' : $('table.order-table tbody tr td.quantity input[name=\'quantity'+ i +'\']').val(),
        'price' : $('table.order-table tbody tr[id=\''+ i +'\']').find('td.price').html(),
        'total' : $('table.order-table tbody tr td.quantity input[name=\'quantity'+ i +'\']').parent().parent().find('td.total').html()
    });
}

希望它会有所帮助。

答案 2 :(得分:1)

product[0]['name'] = "apple mac power"

product[0].name = "apple mac power"

而不是

product[0][name] = "apple mac power"

你的第一种方式是好的,但你添加一个内部有哈希的数组 只删除周围的[]

product[i-1] = {
        'product_id' : $('#product_id' + i).val(),
        'name' : $('#item' + i).val(),
        'model' : $('#model' + i).val(),
        'reward' : $('#reward' +i).val(),
        'subtract' : $('#subtract' + i).val(),
        'minimum' : $('#minimum' + i).val(),
        'shipping' : $('#shipping' + i).val(),
        'tax_class_id' : $('#tax_class_id' + i).val(),
        'weight' : $('#weight' + i).val(),
        'quantity' : $('table.order-table tbody tr td.quantity input[name=\'quantity'+ i +'\']').val(),
        'price' : $('table.order-table tbody tr[id=\''+ i +'\']').find('td.price').html(),
        'total' : $('table.order-table tbody tr td.quantity input[name=\'quantity'+ i +'\']').parent().parent().find('td.total').html()
    };

而不是

product[i-1] = [{
        'product_id' : $('#product_id' + i).val(),
        'name' : $('#item' + i).val(),
        'model' : $('#model' + i).val(),
        'reward' : $('#reward' +i).val(),
        'subtract' : $('#subtract' + i).val(),
        'minimum' : $('#minimum' + i).val(),
        'shipping' : $('#shipping' + i).val(),
        'tax_class_id' : $('#tax_class_id' + i).val(),
        'weight' : $('#weight' + i).val(),
        'quantity' : $('table.order-table tbody tr td.quantity input[name=\'quantity'+ i +'\']').val(),
        'price' : $('table.order-table tbody tr[id=\''+ i +'\']').find('td.price').html(),
        'total' : $('table.order-table tbody tr td.quantity input[name=\'quantity'+ i +'\']').parent().parent().find('td.total').html()
    }];