【发布时间】:2020-06-21 04:34:27
【问题描述】:
我正在尝试使用 Array.fill 在单行代码中创建一个 nxn 棋盘
let board = new Array(n).fill(new Array(n).fill('O'));
当我尝试修改像 board[0][0] = 'Q' 这样的第一个正方形时。它正在更改所有第 0 个索引元素和所有 n 个子数组。我的意图是
┌─────────┬─────┬─────┬─────┬─────┐
│ (index) │ 0 │ 1 │ 2 │ 3 │
├─────────┼─────┼─────┼─────┼─────┤
│ 0 │ 'Q' │ 'O' │ 'O' │ 'O' │
│ 1 │ 'O' │ 'O' │ 'O' │ 'O' │
│ 2 │ 'O' │ 'O' │ 'O' │ 'O' │
│ 3 │ 'O' │ 'O' │ 'O' │ 'O' │
└─────────┴─────┴─────┴─────┴─────┘
但是当我做 board[0][0] = 'Q'
┌─────────┬─────┬─────┬─────┬─────┐
│ (index) │ 0 │ 1 │ 2 │ 3 │
├─────────┼─────┼─────┼─────┼─────┤
│ 0 │ 'Q' │ 'O' │ 'O' │ 'O' │
│ 1 │ 'Q' │ 'O' │ 'O' │ 'O' │
│ 2 │ 'Q' │ 'O' │ 'O' │ 'O' │
│ 3 │ 'Q' │ 'O' │ 'O' │ 'O' │
└─────────┴─────┴─────┴─────┴─────┘
但是当我像这样创建数组时,它可以按预期工作
let board = [
['O','O','O','O'],
['O','O','O','O'],
['O','O','O','O'],
['O','O','O','O'],
]
??????
【问题讨论】:
-
fill 复制对所有元素的相同引用。你必须在上面映射
-
Array(n).fill().map(_ => Array(n).fill('O'));应该可以工作。fill的参数始终是别名。
标签: javascript arrays