刷題時遇到一個判斷是否為有效數(shù)獨的算法題, 解法很簡單用三個二維數(shù)組存數(shù)字的狀態(tài), 但是遇到一個問題, 就是初始化二維數(shù)組.
首先用fill函數(shù)去實現(xiàn)
let rowFlag = Array(9).fill(Array(9).fill(false));
....
console.log(rowFlag);
rowFlag[i][c] = true;
console.log(rowFlag);
這個問題很明顯是淺拷貝的問題, 改一下
let flag = Array(9).fill(false);
let rowFlag = Array(9).map(() => flag.concat());
....
console.log(rowFlag);
rowFlag[i][c] = true;
console.log(rowFlag);
然后就直接報rowFlag[i]為undefined, 網(wǎng)上找了下原因:
Array 支持兩種構(gòu)造方式。使用參數(shù)形式給定 N 個數(shù)組元素境蔼,或者給定一個數(shù)組長度。
使用 new Array(arrayLength) 方式構(gòu)造的數(shù)組是一個稀疏數(shù)組玷过,里面是沒有任何值的喧务,只有長度。所以這個方式構(gòu)造出來的數(shù)組是無法遍歷的,也就無法用 map 遍歷填充值了驰弄。
再修改一下
let flag = Array(9).fill(false);
let rowFlag = Array.apply(null, Array(9)).map(() => flag.concat());
....
console.log(rowFlag);
rowFlag[i][c] = true;
console.log(rowFlag);
現(xiàn)在好了