js 二维数组初始化
js的二维数组初始化比C++要麻烦一些。
方法一:
function f(){
for(let i=0;i<m;i++){
arr[i]=[];
for(let j=0;j<n;j++){
arr[i][j]=0;
}
}
}
方法二:使用map
function f(){
let arr=new Array(3).fill(0).map(()=>new Array(4).fill(1));
}
方法三
代码略简单,但有问题,见下文
function f(){
let arr=new Array(3).fill(new Array(4).fill(1));
}
比较:
function f(){
let arr1=new Array(3).fill(new Array(4).fill(1)),arr2=new Array(3).fill(0).map(()=>new Array(4).fill(1));
arr1[0][1]=3;
arr2[0][1]=3;
console.log(arr1);
console.log(arr2);
}
如果采用直接fill的形式,如arr1,在初始化的时候会和arr2有相同效果,但在之后对值修改时,会将同一列的所有值一起改掉。猜测它可能是存储了三个相同地址,因此改了以后全都改了。
因此要初始化js的二维数组,还是要采用map的形式。