我不知道术语,但我想让它变得更简单:
var thingTopic1 =['hello','hallo', ..., 'hej'];
var thingTopic2 =['a','b',...,'c'];
...
var thingTopic999 =['x,'y',...,'?'];
所以我想访问像thing[para1][para2]
这样的数据,是否有一些现成的数据结构,还是我需要创建凌乱的函数?请注意,事物的大小不同。
答案 0 :(得分:2)
您可以拥有数组数组,每行的大小可以不同。
var matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
[0]
];
变量“matrix”将引用长度为4的数组。用于引用(比如说)第二行中的“5”的语法正是您所建议的:
var theFive = matrix[1][1];
当然,你可以逐渐“建立”一个矩阵。
var matrix = [];
for (var i = 1; i < 10; ++i) {
var row = ~~((i - 1) / 3);
if (!matrix[row]) matrix[row] = [];
matrix[row][(i - 1) % 3] = i;
}
matrix.push([0]);
当您设置Array实例的整数索引“属性”时,Javascript会确保更新数组的“length”属性。 不为数组中的“holes”分配空间,所以如果先设置元素号200,那么数组中仍然只有一个东西,即使“length”为201。
答案 1 :(得分:1)
不,没有数据结构,但你可以通过组合数组轻松完成它。
您可以创建一个包含数组的数组,称为锯齿状数组:
var thing = [
['hello','hallo','goddag','guten tag','nuqneH','hej'],
['a','b','c','d','e','f','g','h','i','j'],
['x,'y','z']
];
注意内部数组如何具有不同的长度,这就是术语“锯齿状”的来源。
答案 2 :(得分:0)
您可以从ES6的OOP中获益:
class Matrix extends Array {
constructor(...rows) {
if(rows.some( r => !Array.isArray(r)))
throw new TypeError('Constructor accepts only rows as array')
super(...rows)
}
push(...rows) {
if(rows.some( r => !Array.isArray(r)))
throw new TypeError('Push method accepts array(s)')
super.push(...rows)
}
}