如何在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;未定义的
我做错了什么?
答案 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;
并完全失去循环呢?