如何在JavaScript中创建多维数组

How to create a multidimensional array in JavaScript?

本文关键字:数组 创建 JavaScript      更新时间:2023-09-26

如何在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:无法读取未定义的属性"0"

TypeError:无法设置未定义的属性"a"

我做错了什么?

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;
}

循环中的每次迭代都是在执行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;并完全丢失循环呢?

您声明对象的方式有点错误。看起来您正在尝试创建一个对象数组。

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
    });
}