Javascript:有数据结构,“矩阵”,东西[x] [y]?

时间:2010-12-22 00:25:20

标签: javascript

我不知道术语,但我想让它变得更简单:

var thingTopic1 =['hello','hallo', ..., 'hej'];
var thingTopic2 =['a','b',...,'c'];
...
var thingTopic999 =['x,'y',...,'?'];

所以我想访问像thing[para1][para2]这样的数据,是否有一些现成的数据结构,还是我需要创建凌乱的函数?请注意,事物的大小不同。

3 个答案:

答案 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)

   }

}

用例1:

enter image description here

用例2:

enter image description here