2次元配列をarray.fill()
で埋めた時の挙動が難しかったのでメモ
const row = [0, 0]
const table = new Array(2)
// 0埋め
table.fill([...row])
const table2 =[[0, 0],[0, 0]]
console.log(table) // [[0, 0], [0, 0]]
console.log(table2) // [[0, 0], [0, 0]]
table[1][1]++
table2[1][1]++
console.log(table) // [[0, 1], [0, 1]] ?????
console.log(table2) // [[0, 0], [0, 1]]
スプレッド演算子で配列コピーして中身の配列を埋めると値が共有される?
※コメントいただきましたが、参照を渡すだけのようです。
自分の勝手な予想では、arry.fill()にスプレッド演算子を渡すと、中身の数だけシャローコピーを作ってくれると思っていたけど、実際には、一つシャローコピーを作って、それを参照する模様。
0埋めを下記のように変更すると値渡しになる。
2次元配列にはarray.fill()
は使わない方が良さげ
const row = [0, 0]
const table = new Array(2)
// 0埋め
table[0] = [...row]
table[1] = [...row]
const table2 =[[0, 0],[0, 0]]
console.log(table) // [[0, 0], [0, 0]]
console.log(table2) // [[0, 0], [0, 0]]
table[1][1]++
table2[1][1]++
console.log(table) // [[0, 0], [0, 1]]
console.log(table2) // [[0, 0], [0, 1]] 想定どうり