什么是真正的多维数组?

时间:2011-12-30 23:39:12

标签: javascript arrays multidimensional-array

我正在读一本关于Javascript的书并看到了这一行;

  

JavaScript不支持真正的多维数组,但您可以   用数组数组近似它们。

有什么区别?

5 个答案:

答案 0 :(得分:17)

真正的多维数组必须使用多个索引编制索引。可以使用单个索引索引数组数组,该索引将返回另一个数组。真正的多维数组连续存储其所有数据。数组数组存储其周围任意散布的所有组成数组。由于真实数组的缓存效应,这可以提高迭代性能。

答案 1 :(得分:3)

(一种视觉解释,补充了answer的优秀@recursive

在某些语言(C#)中,两者都有。不同之处在于此类阵列的“形状”。

int[3, 4] // true two-dimensional array

// it will "look" like this, rectangular shape
[[0, 0, 0, 0]
 [0, 0, 0, 0]
 [0, 0, 0, 0]]

但是当你定义一个数组数组时,它很容易(特别是在javascript中)看起来像这样。它被称为jagged array

[[0, 0]
 [0, 0, 0, 0, 0, 0]
 [0, 0, 0]]

答案 2 :(得分:2)

JavaScript中没有任何内容......

var arr = new Array[5][3]; /* Some weird JS/C-like thing for demonstration */

......强制执行长度。像矩阵一样。

但是,您可以构建一个Array,其成员都是Array个固定长度。如果其中一个子Array具有不同的长度,那么它将是锯齿状的 Array

答案 3 :(得分:2)

作者似乎假设“真正的”多维数组是所有元素的数组:

  • 是数组;

  • 按值存储,而不是按引用存储;以及

  • 长度相同。

JavaScript数组可能包含其他数组,但不包含值,仅通过引用。也就是说,每行的元素在存储器中可以是连续的,但行本身可以不是。此外,没有办法静态地指示所有内部数组必须具有相同的长度,因为JavaScript是动态类型的。

但是数组数组正是你应该用来表示JavaScript中的多维数组的,当你刚学习语言时,内部表示的细节可能与你无关。

答案 4 :(得分:1)

  

虽然JavaScript规范(3.0)没有提到多维数组,但它们实际上是可行的。多维数组可以由数组数组表示。 See

例如。

var items = [[1,2],[3,4],[5,6]];
alert(items[0][0]); // Would alert 1

Javascript中的一维数组。

var a = [0, 1, 2, 3];
a[[2]] === a[2]; // this is true

2 == [2] //true
// Even complex
2 == [[[2]]]  //true

// And even more
var a = { "xyz" : 1 };
a[[[["xyz"]]]] === a["xyz"];  //true