首页 > 解决方案 > 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 ] ]

我将我的升级nodev9.11.1,这个问题仍未解决。我的系统是 MacOS High Sierra 10.13.6。

我想问一下:

  1. 创建和启动多维数组的正确方法是什么?
  2. 为多维数组元素赋值的正确方法是什么?

谢谢。

标签: javascriptnode.js

解决方案


问题是您正在使用相同内部数组的三个引用填充第一个数组。因此,当您改变任何实例时,它将反映在外部数组中的每个条目中,因为它的所有三个项目都是同一个数组。如果您希望它很好地扩展,您最好使用循环来执行此操作:

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);


推荐阅读