我正在嘗試用爪哇腳本制作一個游戲。游戲板初始化為零填充的 2-D 數組。但是,當我設置單個點的值時,將使用該值設置完整的列。我認為這是我初始化數組的方式的一些問題。方法 1# initializationgameState = Array(6).fill(Array(7).fill(0))# later in the gamegameState[2][4] = 1# results in complete 4th index column to be assigned the value 1, like so -0: (7) [0, 0, 0, 0, 1, 0, 0]1: (7) [0, 0, 0, 0, 1, 0, 0]2: (7) [0, 0, 0, 0, 1, 0, 0]3: (7) [0, 0, 0, 0, 1, 0, 0]4: (7) [0, 0, 0, 0, 1, 0, 0]5: (7) [0, 0, 0, 0, 1, 0, 0]方法 2# initializationlet gameState = [];for (let i=0; i<MAX_ROWS; i++) { let row = [] for (let j=0; j<MAX_COLUMNS; j++) { row.push(0) } gameState.push(row);}# again similar assignmentgameState[2][4] = 1# results in correct state of the array0: (7) [0, 0, 0, 0, 0, 0, 0]1: (7) [0, 0, 0, 0, 0, 0, 0]2: (7) [0, 0, 0, 0, 1, 0, 0]3: (7) [0, 0, 0, 0, 0, 0, 0]4: (7) [0, 0, 0, 0, 0, 0, 0]5: (7) [0, 0, 0, 0, 0, 0, 0]有人可以解釋我在這里做錯了什么嗎?
1 回答

子衿沉夜
TA貢獻1828條經驗 獲得超3個贊
你的問題很簡單。
Array(6).fill(Array(7).fill(0))
讓我們解釋一下這是做什么的。
Array(6)
創建一個多孔數組,其中包含 6 個項目的空間。
.fill(...)
將用你作為論據的東西填滿這6個洞。
現在問題來了。
在 Javascript 中,在運行函數執行之前計算參數。
這意味著(在這種只運行一次的確切情況下),您的代碼與以下代碼完全相同:.fill(...)
const innerArray = [0,0,0,0,0,0,0]; gameState = Array(6).fill(innerArray);
這意味著它用完全相同的數組實例填充外部數組 6 次。
您需要的是每次都創建單獨的數組。只需執行此操作:
gameState = [...Array(6)].map(() => [...Array(7)].map(() => 0))
添加回答
舉報
0/150
提交
取消