Javascript数组键作为变量

时间:2016-11-19 11:40:49

标签: javascript arrays

我正在构建和数组,其数组键来自如下变量:

var product_id = $('#product_id').val(); //22
var art = $('#article_id').val(); //229
var stk =  $('#stk').val(); //20
var elements = [];
elements [art] = stk;
console.log(elements);

这是结果

Array[229]
228:"20"
length:229
__proto__:Array[0]

console.log

当你看到结果时,它实际上创建了229数组键,

当我使用该变量进行AJAX POST时。它将所有229个数组项目发布到它。

option[]:
option[]:
option[]:
option[]:
option[]:
option[]:
option[]:
option[]:
option[]:
option[]:
option[]:
option[]:20

post object

我可能只想发布1个关键字和值。

elements[229] = 20;

并非所有未使用的。谢谢!

以下是我的ajax电话

$.ajax({
            url: 'product/getprice',
            type: 'post',
            data: { product_id: product_id, option: element },
            dataType: 'text',
            beforeSend: function() {
            },
            complete: function() {

            },
            success: function(json) {

                json = JSON.parse(json);

             },
            error: function(xhr, ajaxOptions, thrownError) {
                alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
            }
        });

3 个答案:

答案 0 :(得分:3)

您正在创建的阵列是稀疏数组(包含大量缺失条目的数组)。这听起来像你用来序列化数组的任何东西都没有按照你想要的方式处理稀疏数组,而是表现得好像数组不稀疏。

所以至少给你两个选择:

  1. 更改序列化代码。由于您还没有展示,我们无法为您提供帮助。

  2. 使用对象而不是数组:

    var elements = {}; // Note {}, not []
    

    您所显示的其他任何代码都不得更改,但如果您执行此操作,则可能需要更改序列化代码。

答案 1 :(得分:0)

您需要一个Object而不是一个数组。

使用elements

{ }变量语法更改为对象

[ ]代表一个数组。

所以唯一需要的代码更改是

var elements = {};

数组没有键值类型结构。对象有。

执行elements[229]时,实际上是在创建大小为229的数组。这不是你想要的

答案 2 :(得分:0)

将其改为这种方式。

 var elements = {};
elements [art] = stk;