如果使用fill直接添加第二维数组,会有所有二维数组指向同一片内存的错误
let arr=new Array(3).fill(new Array(4).fill(0))
arr[0][1] = 2;
console.log(arr)
//会导致[ [ 0, 2, 0, 0 ], [ 0, 2, 0, 0 ], [ 0, 2, 0, 0 ] ]
这样会导致第二维数组指向同一片内存地址!是错误的!
正确的做法是:
//以下两种方法都是可以的
let dp: number[][] = Array.from(new Array(3), () => new Array(4).fill(0));
let arr2: number[][] = new Array(3).fill(0).map(() => new Array(4).fill(0));
arr2[0][1]=1
console.log(arr2);// [ [ 0, 1, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ] ]
dp[0][1]=1
console.log(dp)
/*[
[ 0, 1, 0, 0 ],
[ 0, 0, 0, 0 ],
[ 0, 0, 0, 0 ]
] */