javascript - Node.js:多维数组赋值
问题描述
我想使用一个 3x3 的二维数组来存储数据。但是,当我将 1 分配给 时g[1][1]
,我发现输出很奇怪 - 整个第二列都分配给了 1!
let g = new Array(3).fill( // 3 x 3
new Array(3).fill(0)
);
console.log(g);
g[1][1] = 1;
console.log(g);
此代码输出:
[ [ 0, 0, 0 ], [ 0, 0, 0 ], [ 0, 0, 0 ] ]
[ [ 0, 1, 0 ], [ 0, 1, 0 ], [ 0, 1, 0 ] ]
我将我的升级node
到v9.11.1
,这个问题仍未解决。我的系统是 MacOS High Sierra 10.13.6。
我想问一下:
- 创建和启动多维数组的正确方法是什么?
- 为多维数组元素赋值的正确方法是什么?
谢谢。
解决方案
问题是您正在使用相同内部数组的三个引用填充第一个数组。因此,当您改变任何实例时,它将反映在外部数组中的每个条目中,因为它的所有三个项目都是同一个数组。如果您希望它很好地扩展,您最好使用循环来执行此操作:
function createMultidimensionalArray(size) {
const outer = [];
for (let i=0; i<size; i++) {
outer.push(new Array(size).fill(0));
}
return outer;
}
let arr = createMultidimensionalArray(3);
console.log(arr);
arr[1][1] = "test";
console.log(arr);
推荐阅读
- sql - NOT NULL 本身可以正确输出。添加 NOT NULL、AND 和 OR 输出空值
- json - 如何在 Facebook Manager 上发布活动?
- vba - VBA中自调用函数中的返回数组
- ios - 使用 MDCMultilineTextField 的带有边框和浮动占位符的 UITextView
- java - Spring MessageSource:访问依赖jar中的消息文件
- javascript - 在本机反应中使用redux将输入从大写转换为小写
- java - 不同输入的二维码可以相同吗?
- react-testing-library - 如何使用 useEffect 和 useRef 挂钩将焦点设置到反应组件中的 div 元素?以及如何测试它?
- node.js - 带有 TypeScript 的 Azure Functions 的 Hello World 应用程序无法使用 VSCode 启动
- assembly - 检查输入是否是汇编语言中的字母、数字或特殊字符