使用new Array()。fill(0)bug创建2D数组?

时间:2016-08-04 07:24:37

标签: javascript arrays

我想创建一个2d数组,但我发现了一个有趣的行为

<httpCompression directory="%TEMP%\iisexpress\IIS Temporary Compressed Files">
  <scheme name="gzip" dll="%IIS_BIN%\gzip.dll" />
  <staticTypes>
    <add mimeType="text/*" enabled="true" />
    <add mimeType="message/*" enabled="true" />
    <add mimeType="image/svg+xml" enabled="true" />
    <add mimeType="application/javascript" enabled="true" />
    <add mimeType="text/javascript" enabled="true" />
    <add mimeType="application/javascript; charset=utf-8" enabled="true" />
    <add mimeType="application/atom+xml" enabled="true" />
    <add mimeType="application/xaml+xml" enabled="true" />
    <add mimeType="*/*" enabled="false" />
  </staticTypes>
</httpCompression>

令我惊讶的是我得到的结果如下:

const column = 10;
const row = 10;

let matrix = new Array(row).fill(new Array(column).fill(0));

matrix[0][1] = 1;

console.log(matrix)

整个列号1设置为1,我可以知道为什么会出现这种行为吗?

2 个答案:

答案 0 :(得分:2)

Array#fill 方法填充相同的数组,元素是对单个数组的引用。因此,您需要创建单独的数组作为元素。所以更新一个将反映所有其他因为它们不是不同的数组它们是相同的。

使用 Array.from() ,您可以按map function创建和生成值。

&#13;
&#13;
const column = 10;
const row = 10;

let matrix = Array.from({
  // create array of length `row`
  length: row 
  // map function to generate values
}, () => new Array(column).fill(0));

matrix[0][1] = 1;

console.log(matrix)
&#13;
&#13;
&#13;

答案 1 :(得分:1)

@PranavCBalan有权。

就是这样:

let matrix = new Array(row);
var x = new Array(column).fill(0);
matrix[0] = matrix[1] = .. = matrix[column - 1] = x;

你的矩阵是一个对象的数组。