使用javascript创建动态多维关联数组

时间:2013-12-10 13:32:34

标签: javascript jquery dynamic multidimensional-array

以下是我的JS代码:

        var checkedLength = $(ele).parent().parent().find('table').find(':checkbox:checked').length;

    if(checkedLength)
{
     $(ele).parent().parent().find('table').find(':checkbox:checked').each(function(i) {
        $(this).parent().removeClass().addClass('play');
        $(this).prop('checked',false);
        var agn = $(this).data('agn');
        var value = $(this).data('kid');

        checkedValues[agn] = {};
        // Make bar an array, if it's not defined yet
        checkedValues[agn]["bar"] = checkedValues[agn]["bar"] || [];
        checkedValues[agn]["bar"].push(value);
    });
            console.log(checkedValues);
}

从上面的代码我得到输出:

   object {agnName => bar[0] = 6}

期望的O / P:

   object {agnName => bar[0] = 4,bar[1] = 5 , bar[2]=> 6}

任何人都可以指导我如何实现这种数组结构?

感谢。

4 个答案:

答案 0 :(得分:3)

您有一个测试,看看是否存在checkedValues[agn],如果不存在,则将其创建为空对象。但是,然后您会立即尝试推送到该对象中不存在的数组

尝试更改

checkedValues[agn] = {};
checkedValues[agn]['pl'].push = $(this).data('kid');

checkedValues[agn] = {pl:[]};/* add property "pl" who's value is empty array*/
 /* now the array exists , can push elements into it*/
checkedValues[agn]['pl'].push($(this).data('kid'));

另请注意您使用的push()语法不正确.....应为push( value )

答案 1 :(得分:2)

你想要一个对象,而不是一个数组:

checkedValues = {};
checkedValues.foo = {};
checkedValues.foo.bar = 'baz';  

// Another way:
checkedValues["keyname"] = "value";

// You can also use variables as keys
var agn = "foo";
checkedValues[agn] = "value";

// Just don't forget to init nested objects
var agn = "foo";
checkedValues[agn] = {};
checkedValues[agn]["bar"] = "value";

// If you need an array inside:
var agn = "foo";
checkedValues[agn] = {};
// Make bar an array, if it's not defined yet
checkedValues[agn]["bar"] = checkedValues[agn]["bar"] || [];
checkedValues[agn]["bar"].push("value");

答案 2 :(得分:0)

关联数组在Javascript中作为对象完成:

var data = {
    agnName: {
        pl: [4, 5, 6]
    }
}

因此您可以访问data.agnName.pl [0]以使用data ['agnName']动态返回4个或更多.pl [0]

答案 3 :(得分:0)

创建一个覆盖维度的obj。你必须初始化obj然后你可以输入值。如下所示

var obj = {}

obj[dynamicval1] = {};
obj[dynamicval1][dynamicval2] = {};
obj[dynamicval1][dynamicval2] = {key1:value1,key2:value2};

希望它有效!