javascript动态地向数组添加值

时间:2013-09-02 12:39:22

标签: javascript jquery arrays

我正在尝试遍历表单中的复选框,并将它们的值添加到多维javascript对象中。 “attrib”数据属性将成为关键。可能的关键值是“category”,“product_group”和“language”,但我宁愿动态添加它们以防将来再添加。

我希望得到一个这样的对象,我可以轻松地将其作为json_encode的单个值发送到服务器。

values = {
    'category' : {1,2,3},
    'product_group' : {4,5,6},
    'language': {'en','fr','de'}
};

以下代码。显然,每次迭代都会覆盖现有值,而不是添加到现有值。我不确定在哪里可以创建值[key]作为对象......?

$('.filter input, .multiselect-container input').change(function() {
    var values = {}
    $('.filter input:checked').each(function() {
        if($(this).is(':checked')) {
            var key = $(this).data('attrib')
            var value = $(this).val()
            values[key] = value
            // values[key].push(value) = calling method push of undefined ...
        }
        else {
            // Remove value
        }       
    })
    console.log(values) 
})

4 个答案:

答案 0 :(得分:3)

您的错误是由于values[key]undefined,因此没有push方法。

试试这段代码:

        if($(this).is(':checked')) {
            var key = $(this).data('attrib')
            var value = $(this).val()
            values[key] = values[key] || [] // initialize with empty array
            values[key].push(value)
        }

答案 1 :(得分:0)

不确定这是你在找什么:

if(!values[key])
   values[key]=new Array();

values[key].push(value);

但是这样你可以为每个键添加一个值数组。

答案 2 :(得分:0)

试试这个:

        if($(this).is(':checked')) {
            var key = $(this).data('attrib')
            var value = $(this).val()
            if(typeof values[key]  == "undefined")
            values[key] = [];
            values[key].push(value);

        }
        else {
            // Remove value
        }       

答案 3 :(得分:0)

首先,您的数据表示不正确。对象属性应该是这样的数组:

values = {
    'category' : [1,2,3],
    'product_group' : [4,5,6],
    'language': ['en','fr','de']
};

使用该数据表示,这段代码将满足您的需求:

$('.filter input, .multiselect-container input').change(function() {
var values = {}
$('.filter input:checked').each(function() {
    if($(this).is(':checked')) {
        var key = $(this).data('attrib')
        var value = $(this).val()
        values[key] = value
        if (values.key == undefined){
            //Check if key exists. If not, create it as an array
            values[key] = Array()
            values[key].push(value)
        }
        else{
            values[key].push(value)
        }
    }
    else {
        // Remove value
    }       
})
console.log(values) 

})