在Javascript中声明一个空的二维数组?

118

我想在Javascript中创建一个二维数组,用于存储坐标(x,y)。由于这些坐标将由用户输入动态生成,因此我还不知道会有多少对坐标。

预定义的二维数组示例:

var Arr=[[1,2],[3,4],[5,6]];

我想我可以使用PUSH方法在数组末尾添加新记录。

如何声明一个空的二维数组,使得当我使用我的第一个Arr.push()时,它将被添加到索引0,并且每个下一个由push写入的记录都会取下一个索引?

这可能非常容易做到,我只是JS的新手,如果有人能写一段简短的可行代码片段供我查看,我将不胜感激。谢谢。


你尝试过 var Arr = new Array(new Array()); 吗?是的, pushpop 会在数组末尾添加或删除元素,而 shiftunshift 则会在数组开头删除或添加元素。 - abiessu
这听起来像是两个不同的问题。首先,您想要任意大小的数组。然后,您似乎在问一个涉及push方法的不同问题。(此外,如果您想回答自己的问题,我认为最好在答案部分中回答。)这是Google中创建JavaScript多维数组的排名前列的问题,我知道Google并不在这里决定内容,但我认为这是一个基本重要的问题,有各种奇怪的答案。 - PJ Brunet
23个回答

-2
const dp=new Array(3).fill(new Array(3).fill(-1))

它将创建以下数组:

[ [ -1, -1, -1 ], [ -1, -1, -1 ], [ -1, -1, -1 ] ]

请尽力写出最好的答案,包括清晰的解释和代码示例。也可以通过编辑来改善您的回答。 - levininja

-3

在填充第一个数组时,您可以嵌套一个新的数组:

let ROWS = 2,
    COLS = 6;
let arr = new Array(ROWS).fill(new Array(COLS).fill(-1));

Output:
arr = 
[
  [-1, -1, -1, -1, -1, -1],
  [-1, -1, -1, -1, -1, -1]
]

如果您感到困惑,让我们通过声明/填充1个数组来分解它:

let arr1d = new Array(d).fill(<whatever_fill_val>);

现在,您可以用另一个数组填充第一个数组,同时填充嵌套的数组!

let arr = new Array(d).fill(new Array(n).fill(-1));


https://dev59.com/LmMl5IYBdhLWcg3wwZEq#o7ejEYcBWogLw_1bcgob - CPAR
2
正如@MrMartiniMo在类似的答案中指出的那样:这种解决方案的问题在于每一行都包含相同的数组。如果你设置arr[1][2] = 1,每一行都将包含[-1, -1, 1, -1] - Arthur Weborg

-6

// 对于一个 3 x 5 的数组

new Array(3).fill(new Array(5).fill(0))

8
无效。在第一维中的每个项目都包含对同一次要数组的引用。因此,a[0][y] === a[1][y] === a[2][y] 会导致一些奇怪的结果。 - Franck Jeannin

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