【爬坑】JavaScript创建二维数组遇到的问题

1. 问题描述

在做leetcode题目的时候,我一开始用下面一段代码创建二维数组:

let arr = new Array(m).fill(new Array(n).fill(0))

打印出的结果是没有问题的,但是我需要对元素进行赋值操作,发现有些测试用例过不了,打印最后生成的arr发现很多元素自增了多次。

2. 原因分析

上面方法创建的是一个包含 n 个元素的数组的引用,这个数组的每个元素都被填充为 0。当 fill 方法将这个数组填充到外部数组中时,它只是将这个数组的引用复制到了每个位置上。这意味着,当我们更改一个元素时,这个变化会反映在所有行上,因为它们都共享同一个内部数组的引用。

3. 解决

  • 使用如下方式创建二维数组:

let arr = new Array(m).fill(0).map(() => new Array(n).fill(0))

这种方法使用了两个操作符:fill 和 map。首先,new Array(m) 创建一个包含 m 个元素的新数组,每个元素都是 undefined。然后使用 fill(0) 将每个元素都填充为 0。接着,使用 map(() => new Array(n).fill(0)) 将数组的每个元素都映射为一个包含 n 个元素的新数组,每个元素都是 0。这样,我们就得到了一个 m 行 n 列的二维数组。

猜你喜欢

转载自blog.csdn.net/weixin_44109827/article/details/129377539