Javascript 修改多阵列中的所有阵列

Javascript 修改多阵列中的所有阵列,javascript,arrays,multidimensional-array,Javascript,Arrays,Multidimensional Array,我正试图用一个矩形区域“绘制”一些网格。但当我试图修改一行时,数组会修改所有行。我尝试用几种方法初始化数组,但问题似乎是当我试图修改它时,而不是数组对象 var multiArray=Array(8.fill)(Array(8.fill)(false)); //在(2,4)处填充正方形3x1 对于(变量i=0;ie?'X':'0')。连接(“”)) .join(“”) 数组(8).fill(数组(8).fill(false))只创建两个数组,其中一个数组包含对另一个数组的八个引用。如果将其分为

我正试图用一个矩形区域“绘制”一些网格。但当我试图修改一行时,数组会修改所有行。我尝试用几种方法初始化数组,但问题似乎是当我试图修改它时,而不是数组对象

var multiArray=Array(8.fill)(Array(8.fill)(false)); //在(2,4)处填充正方形3x1 对于(变量i=0;i<3;i++){ 对于(var j=0;j<1;j++){ 多数组[2+i][4+j]=真; } } document.getElementById(“内容”).innerHTML= multiArray.map(a=>a.map(e=>e?'X':'0')。连接(“”)) .join(“
”)
数组(8).fill(数组(8).fill(false))
只创建两个数组,其中一个数组包含对另一个数组的八个引用。如果将其分为两行,则这一点更为明显-以下是等效的:

var tempArray = Array(8).fill(false);
var multiArray = Array(8).fill(tempArray);
所以这不是你想要的。请尝试以下方法:

var multiArray = Array(8).fill(0).map(_=>Array(8).fill(false));
我已经用零填充了第一个数组作为占位符,这样
.map()
将访问所有这些元素,然后对于每个元素,我的小map回调返回一个新数组,其中填充了
false

在这方面:

var multiArray=Array(8).fill(0).map(=>Array(8).fill(false));
//在(2,4)处填充正方形3x1
对于(变量i=0;i<3;i++){
对于(var j=0;j<1;j++){
多数组[2+i][4+j]=真;
}
}
document.getElementById(“内容”).innerHTML=
multiArray.map(a=>a.map(e=>e?'X':'0')。连接(“”))
.join(“
”)
数组(8).fill(数组(8).fill(false))
只创建两个数组,其中一个数组包含对另一个数组的八个引用。如果将其分为两行,则这一点更为明显-以下是等效的:

var tempArray = Array(8).fill(false);
var multiArray = Array(8).fill(tempArray);
所以这不是你想要的。请尝试以下方法:

var multiArray = Array(8).fill(0).map(_=>Array(8).fill(false));
我已经用零填充了第一个数组作为占位符,这样
.map()
将访问所有这些元素,然后对于每个元素,我的小map回调返回一个新数组,其中填充了
false

在这方面:

var multiArray=Array(8).fill(0).map(=>Array(8).fill(false));
//在(2,4)处填充正方形3x1
对于(变量i=0;i<3;i++){
对于(var j=0;j<1;j++){
多数组[2+i][4+j]=真;
}
}
document.getElementById(“内容”).innerHTML=
multiArray.map(a=>a.map(e=>e?'X':'0')。连接(“”))
.join(“
”)
创建N维数组有点棘手,因为数组是引用类型。我以前做过如下事情。
arrayND
函数将每个维度的大小作为参数,最后一个参数是初始化值。我希望有帮助

Array.prototype.clone=function(){
返回此.map(e=>Array.isArray(e)?e.clone():e);
};
函数arrayND(…n){
返回n.reduceRight((p,c)=>c=(新数组(c)).fill().map(e=>Array.isArray(p)→p.clone():p));
}
var arrND=arrayND(8,8,false);

控制台日志(arrND)创建N维数组有点棘手,因为数组是引用类型。我以前做过如下事情。
arrayND
函数将每个维度的大小作为参数,最后一个参数是初始化值。我希望有帮助

Array.prototype.clone=function(){
返回此.map(e=>Array.isArray(e)?e.clone():e);
};
函数arrayND(…n){
返回n.reduceRight((p,c)=>c=(新数组(c)).fill().map(e=>Array.isArray(p)→p.clone():p));
}
var arrND=arrayND(8,8,false);

控制台日志(arrND)太好了,我试图在不填充零的情况下放置贴图,但是数组()把我搞砸了。非常感谢;)太好了,我试着在没有零填充的情况下放置贴图,但是数组()把我搞砸了。非常感谢;)