刷题时遇到一个判断是否为有效数独的算法题, 解法很简单用三个二维数组存数字的状态, 但是遇到一个问题, 就是初始化二维数组.
首先用fill函数去实现
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, 网上找了下原因:
Array 支持两种构造方式。使用参数形式给定 N 个数组元素,或者给定一个数组长度。
使用 new Array(arrayLength) 方式构造的数组是一个稀疏数组,里面是没有任何值的,只有长度。所以这个方式构造出来的数组是无法遍历的,也就无法用 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);

现在好了
网友评论