用JavaScript初始化和填充多维数组

6

我们如何初始化并创建新的多维数组?

假设我想要初始化一个4x4的多维数组,并使用0填充它。

通常,对于二维数组,我们可以这样做:

let twod_array = Array.from(Array(4), () => new Array(4).fill(0)); // 创建一个4x4大小的二维数组并用0填充

那么如果我想创建[[0,0], [0,0]](2x2矩阵)该怎么做呢?

let matrix = [[0,0], [0,0]];

let matrix = new Array([]).fill(0); 

我正在尝试解决一些算法问题,这需要我创建一个新的多维数组,并对它们进行遍历(例如岛屿问题)。

请给予建议。

编辑:

我还发现另一种解决方案:

Array(2).fill(0).map(_ => Array(2).fill(0));


1
你是否知道推荐的标识符命名格式是 [a-zA-z][a-zA-Z0-9_]+ - Sagar V
@Redo 谢谢你的回复。你能再详细说明一下吗?我想了解你所说的“标识符名称格式”是什么意思,你能举个例子吗? - TechnoCorner
他的意思是你不能以数字开头命名一个变量。 - rphv
避免使用以非字母字符开头的变量名,例如 1Darray。大多数编程语言都会报错。 - Sagar V
可能是如何在JavaScript中创建二维数组?的重复问题。 - rphv
更正:@rphv :-) - TechnoCorner
2个回答

3
为了得到一个独立的填充数组,你可以使用Array.from方法,并将一个新数组映射为映射值。

var array = Array.from({ length: 4 }, _ => Array.from({ length: 4 }, _ => 4));

array[0][0] = 0;
console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }


我们能否像这样做 a = Array(5).fill(0).map(x => Array(10).fill(0))?但我的问题是,除了循环遍历数组并创建另一个数组外,我们不能有类似.fill的简写来创建/填充多维数组吗? - TechnoCorner
实际上,fill 方法为每个元素使用一个值,如果该值是一个数组,则插入相同的对象引用。 - Nina Scholz

2

@NinaScholz的答案更好,一如既往,但在看到那个答案之前我已经写完了,所以决定仍然发布。

类似的想法,但不使用Array.from。它在指定的长度处创建一个新数组,用0填充它以便可以迭代,迭代它以将0替换为一个新数组,该数组的指定长度填充指定的值。

    
const buildMatrix = (l, h, v) => Array(l).fill(0).map(_ => Array(h).fill(v));
const matrix = buildMatrix(4,4,4);
matrix[0][0] = 0;
console.log(matrix);
.as-console-wrapper { max-height: 100% !important; }


感谢您的帖子。我可以将其重写为var test2 = new Array(2).fill(new Array(2).fill(0))吗? - TechnoCorner
这段程序相关的内容翻译成中文如下:它将是 Array(2).fill(0).map(_ => Array(2).fill(0));。其中 map 很重要,否则它会用对同一个数组的引用来填充数组,而不是为每个元素创建一个新的数组。 - user4639281

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