如何在JavaScript中创建多维数组?

时间:2014-10-31 20:53:19

标签: javascript arrays multidimensional-array

如何在JavaScript中创建多维数组? 我有:

var m = 4;
for (var i = 0; i < m; i++){
    groupsData.name_of_bar = [];
    groupsData.name_of_bar[i]['a'] = data[i].a;
    groupsData.name_of_bar[i]['ab'] = data[i].ab;
    groupsData.name_of_bar[i]['de'] = data[i].de;
    groupsData.name_of_bar[i]['gh'] = data[i].gh;
    groupsData.name_of_bar[i]['xy'] = data[i].xy;
}

如果我这样做:

groupsData.name_of_bar[0]

我收到错误:

  

TypeError:无法读取属性&#39; 0&#39;未定义的

     

TypeError:无法设置属性&#39; a&#39;未定义的

我做错了什么?

3 个答案:

答案 0 :(得分:2)

JavaScript本身并不支持多维数组。最接近的是创建一个数组,其中的值也是数组。

// Set this **outside** the loop so you don't overwrite it each time you go around the loop
groupsData.name_of_bar = [];

for (var i = 0; i < m; i++){
    // Create a new "array" each time you go around the loop
    // Use objects, not arrays, when you have named properties (instead of ordered numeric ones)
    groupsData.name_of_bar[i] = {};

    groupsData.name_of_bar[i]['a'] = data[i].a;
    groupsData.name_of_bar[i]['ab'] = data[i].ab;
    groupsData.name_of_bar[i]['de'] = data[i].de;
    groupsData.name_of_bar[i]['gh'] = data[i].gh;
    groupsData.name_of_bar[i]['xy'] = data[i].xy;
}

答案 1 :(得分:0)

你宣布你的物品的方式有点偏。看起来您正在尝试创建一个对象数组。

var groupsData = {name_of_bar: []}, 
    m = 4, 
    i = 0;
for(; i < m; i++) {
    groupsData.name_of_bar.push({
        a: data[i].a, 
        ab: data[i].ab, 
        de: data[i].de, 
        gh: data[i].gh, 
        xy = data[i].xy
    });
}

答案 2 :(得分:0)

循环中的每次迭代,你都在做groupsData.name_of_bar = [];删除其中已有的任何内容,并将其替换为空白数组。

此外,当您执行groupsData.name_of_bar[i]['a']时,您需要先创建groupsData.name_of_bar[i]

执行此操作的方法是:

groupsData.name_of_bar = [];

var m = 4;
for (var i = 0; i < m; i++){
    groupsData.name_of_bar.push({
        a: data[i].a,
        ab: data[i].ab,
        ab: data[i].ab,
        de: data[i].de,
        gh: data[i].gh,
        xy: data[i].xy,
    });
}

请注意,在JavaScript中,数组只能 进行数字索引。如果需要字符串索引,则需要使用对象。

此外,如果data[i]中没有其他值,那么您可以通过执行以下操作进一步简化:

groupsData.name_of_bar = [];

var m = 4;
for (var i = 0; i < m; i++){
    groupsData.name_of_bar.push(data[i]);
}

哎呀,为什么不使用groupsData.name_of_bar = data;并完全失去循环呢?