数组array[1][2]的含义是什么?

4
我正在阅读Mozilla的打砖块游戏教程时,遇到了一个奇怪的数组问题。我到处搜索,但找不到相关信息。代码见: (https://developer.mozilla.org/en-US/docs/Games/Tutorials/2D_Breakout_game_pure_JavaScript/Build_the_brick_field )
我尝试在W3Schools和更仔细地阅读Mozilla教程,但没有找到任何关于我的问题的信息。
var bricks = [];
for(var c=0; c<brickColumnCount; c++) {
    bricks[c] = [];
    for(var r=0; r<brickRowCount; r++) {
        bricks[c][r] = { x: 0, y: 0 };
/*Right above is what I don't get: bricks[c][r]*/
    }
}

bricks是一个二维列表或者列表的列表。因此,bricks[c][r]引用了第c个列表中的第r个元素。 - depperm
谢谢@depperm!那真的很有用。 - user11777421
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array#Creating_a_two-dimensional_array - epascarello
4个回答

7

array[n][m] 语法允许您访问二维数组的元素。您可能已经熟悉了访问数组一个元素的方式:arr[0] 可以获取 arr 的第一个元素,该值可以是字符串、数字、布尔值等。该值也可以是一个数组本身。一旦您拥有了表示为 arr[0] 的数组,您就可以通过执行 arr[0][newIndex] 访问该数组上的元素。请参见以下示例:

var arr = [
    "hello",
    "world",
    ["my", "new", "array"]
]

使用这个例子,arr[0] 将给你返回 "hello",arr[1] 将给你返回 "world"。按照这个逻辑,arr[3] 将给你返回 ["my", "new", "array"]。现在你可以访问这个新数组中的元素:arr[3][0] 返回 "my",arr[3][1] 返回 "new",等等。
编辑:
要在函数中创建一个二维数组,与添加数字或布尔值时一样,只需将它变成一个数组即可!
function myFunction() {
    var myArray = ["one", "two"]
    myArray.push(["embedded", "array", "here"])
}

所以基本上,您可以使用该方法访问嵌套数组值?您如何使用JavaScript函数创建嵌套数组?感谢您的帮助! - user11777421
这不是一个方法,而是一种访问属性的方式(请记住,在JavaScript中,数组只是具有数字键的对象)。你基本上可以像我在示例中所做的那样去做(我现在将对其进行编辑)。 - entersudonym
arr[0][0] 将会给你 h,我没有看到它被提到。 - Get Off My Lawn

3
在此示例中,有一组大小为brickColumnCount的列和一组大小为brickRowCount的行。
变量c和r引用当前列和行。因此,bricks[c][r]是对列c和行r处当前砖块的引用。这是因为bricks是一个数组。数组中的每个项都代表一列,因此您可以将当前列视为bricks[c]。
当前列也是一个由行数据组成的数组。该数组中的每个项都代表实际的砖块。因此,如果bricks[c]是currentColumn,则bricks[c][r]是currentColumn[r],它表示当前的砖块。
本设计中,每列都保存行数据。这是一个列的数组,其中每列都保存行数据的数组。
如果我们有一个3 x 3的砖块集合
ABC
DEF
GHI

如果在我的例子中,c 是1,而r是2(基于0的索引),那么我们将查看砖块F。

回到问题所示的代码,然后它们会迭代遍历集合中的每个砖块,并将其初始化为对象{ x: 0, y: 0 },理论上准备对其进行修改以表示某种标量模拟或数据(根据链接页面,这是用于碰撞检测)。


2
[x]或方括号是访问列表的一种方式;在Javascript中,列表称为数组。
假设我们有一个由数字1、2和3组成的列表。在Javascript中,它会像这样呈现:
let list = [1,2,3]

现在如果你想从那个列表中获取值,你可以使用[x]符号。Javascript从零开始索引,因此请记住以下示例:

最初的回答:

如果您想从该列表中提取值,可以使用[x]表示法。JavaScript从0开始索引,因此请在下面的示例中记住这一点:

list[0] === 1;
list[1] === 2;
list[2] === 3;

这些列表不仅仅可以是整数,它们可以是Javascript允许的任何数据类型,比如字符串、对象或函数。在您的情况下,如果我们用另一个列表替换[0]索引,并且您想要能够访问该内部列表,您需要使用list[0][x],其中x是您想要在内部列表中访问的索引。


list = [1,2,3];

最初的回答改为

更改为

list = [['a','b'],2,3];

如果我们想得到“a”,我们需要执行以下操作:

最初的回答
list[0][0] === 'a';

Similarly, we could get 'b' if we did this

list[0][1] === 'b';

别人在上面已经回答得更好了。多维数组是这种情况的正确名称。 - James

2

JavaScript是一种非常灵活的语言。数组可以成为数组的元素。但在这种情况下,我会避免使用“二维”数组这个术语,因为数组的元素可以是不同类型的。看看这个例子:

JavaScript是一种非常灵活的语言。数组可以成为数组的元素。但在这种情况下,我会避免使用“二维”数组这个术语,因为数组的元素可以是不同类型的。看看这个例子:

var arr = [1, "string", ["a", "b", "c", ["d", "e"]], {a: 1, b :2}]

arr[0][0] -> undefined
arr[1][0] -> "s"
arr[2][0] -> "a"
arr[3][0] -> undefined
arr[2][3] -> ["d", "e"]

那么你能做到 arr[2][3][0] 吗? - user11777421
是的,你可以。你甚至可以使用arr[2][3][666],并且你会得到未定义的结果。在Java中,你会得到一个错误,但在JS中不会 :) - Rastko Sasic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接