简体   繁体   English

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

[英]How to create a multidimensional array in JavaScript?

How can I create a multidimensional array in JavaScript? 如何在JavaScript中创建多维数组? I have: 我有:

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

If I do: 如果我做:

groupsData.name_of_bar[0]

I get errors: 我收到错误消息:

TypeError: Cannot read property '0' of undefined TypeError:无法读取未定义的属性“ 0”

TypeError: Cannot set property 'a' of undefined TypeError:无法设置未定义的属性“ a”

What am I doing wrong? 我究竟做错了什么?

JavaScript doesn't support multidimensional arrays per se. JavaScript本身不支持多维数组。 The closest you can come is to create an array where the values in it are also arrays. 最接近的是创建一个数组,其中的值也是数组。

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

The way you are declaring your objects are a little off. 您声明对象的方式有些偏离。 It looks like you are attempting to create an array of objects. 似乎您正在尝试创建对象数组。

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

Each iteration through the loop, you are doing groupsData.name_of_bar = []; 循环中的每次迭代,您都在进行groupsData.name_of_bar = []; . This removes whatever else is already in there and replaces it with a blank array. 将删除那里已经存在的任何东西,并用空白数组替换它。

Also, when you do groupsData.name_of_bar[i]['a'] , you need to create groupsData.name_of_bar[i] first. 另外,当您执行groupsData.name_of_bar[i]['a'] ,需要首先创建groupsData.name_of_bar[i]

A way to do this is: 一种方法是:

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

Note that in JavaScript, arrays can only be numerically indexed. 请注意,在JavaScript中, 只能对数组进行数字索引。 If you want string indexes, you need to use an object. 如果要使用字符串索引,则需要使用一个对象。

Also, if there are no other values in data[i] , then you can simplify this even further by doing: 另外,如果data[i]中没有其他值,则可以通过执行以下操作进一步简化此操作:

groupsData.name_of_bar = [];

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

Heck, why not just use groupsData.name_of_bar = data; 哎呀,为什么不只使用groupsData.name_of_bar = data; and lose the loop altogether? 并完全失去循环?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM