Javascript JS:为什么使用myArray.fill()会弄乱嵌套数组的myArray.push()?

Javascript JS:为什么使用myArray.fill()会弄乱嵌套数组的myArray.push()?,javascript,arrays,Javascript,Arrays,我正在用嵌套数组在JS上做一件有趣的小事情,但这个奇怪的错误让我沮丧了将近半个小时。下面是一些给出错误的示例代码: var myArray=新数组(2); myArray.fill([]); out1.innerHTML=myArray; myArray[0]。推送(0); out2.innerHTML=myArray 数组。填充([])将只创建一个子数组,然后将其分配给myArray数组的每个条目。无论您查看myArray[0]还是myArray[1],都会在所有阵列插槽中看到该单个子阵列

我正在用嵌套数组在JS上做一件有趣的小事情,但这个奇怪的错误让我沮丧了将近半个小时。下面是一些给出错误的示例代码:

var myArray=新数组(2);
myArray.fill([]);
out1.innerHTML=myArray;
myArray[0]。推送(0);
out2.innerHTML=myArray

数组。填充([])
将只创建一个子数组,然后将其分配给
myArray
数组的每个条目。无论您查看
myArray[0]
还是
myArray[1]
,都会在所有阵列插槽中看到该单个子阵列的任何突变,因为两者都引用相同的单个子阵列

您真正想要的是在
myArray
中为每个插槽创建一个单独的子阵列。例如,您可以使用
array.from
一次性定义数组,但当然有很多方法可以实现这一点:

let myArray = Array.from({length: 2}, () => []) 
Array.fill([])
将只创建一个子数组,然后将其分配给
myArray
数组的每个条目。无论您查看
myArray[0]
还是
myArray[1]
,都会在所有阵列插槽中看到该单个子阵列的任何突变,因为两者都引用相同的单个子阵列

您真正想要的是在
myArray
中为每个插槽创建一个单独的子阵列。例如,您可以使用
array.from
一次性定义数组,但当然有很多方法可以实现这一点:

let myArray = Array.from({length: 2}, () => []) 
myArray.fill([])
使用对同一数组(the[])的引用填充数组的每个元素-这不是您声称的错误,它按预期工作-您可以执行
var myArray=array.from({length:2},()=>[])
替换第一个代码段
myArray.fill([])中的前两行
使用对同一数组([])的引用填充数组的每个元素-这不是您声称的错误,它按预期工作-您可以执行
var myArray=array.from({length:2},()=>[])
替换第一个代码段中的前两行