javascript - 未能设置矩阵单元格值
问题描述
为什么当我这样做时:
let matrix = Array(3).fill(new Array(3).fill(0));
matrix[0][1] = 1
我希望矩阵是:
[ [0,1,0],
[0,0,0],
[0,0,0] ]
但是,矩阵看起来像这样:
[ [0,1,0],
[0,1,0],
[0,1,0] ]
所以它设置了整个列,而不仅仅是单元格。我觉得我在这里错过了一个非常重要的语言。
先感谢您!
解决方案
因为您在内存中对所有索引使用相同的引用。
想象这是内存,索引指向内存中的相同值,因此,特定索引的每次更改都会修改该值
new Array(3).fill(0) Matrix
+---------+ +-----------+
| [0,0,0] | <--+------| Index 0 |
+---------+ | +-----------+
^ +------| Index 1 |
| +-----------+
+---------------| Index 2 |
+-----------+
为每个索引创建一个新数组
{length: 3}, () => Array(3).fill(0) Matrix
+---------+ +-----------+
| [0,0,0] | <-----------------------| Index 0 |
+---------+ +-----------+
| [0,0,0] | <-----------------------| Index 1 |
+---------+ +-----------+
| [0,0,0] | <-----------------------| Index 2 |
+---------+ +-----------+
let matrix = Array.from({length: 3}, () => Array(3).fill(0));
matrix[0][1] = 1;
console.log(matrix);
推荐阅读
- c++ - 如何避免同一个列表上的多线程中的空指针?
- php - 如何在 WooCommerce 中遍历订单商品数量
- flutter - 我想在我的颤振应用程序中通过 onPressed 方法生成卡片。谁能给我一个路线图...?
- ubuntu - 如何使用共享文件的确切版本安装 OpenMPI?
- regex - 匹配一个单词后跟任何数字,但有例外
- typescript - typescript 4.1中rest参数的数组和条件递归类型
- python - Python数据框列填充相同的数字数据
- vue.js - 如何连接 Vue.js 作为前端和 Fastapi 作为后端
- c++ - 通过 QIdentityProxyModel 向 QSqlTableModel 添加数据失败
- javascript - 如何使用 switchmap 来避免 Angular 中的嵌套订阅?