我一直在尝试在ES6中转置矩阵(例如2D数组),但是for循环仅给出原始数组的最后一个值,我不知道自己做错了什么。
假设频谱数组的大小为128 x 128:
const width = 128;
const height = 128;
var spectrum: Complex[][] = fft(data);
// Transpose spectrum array
var transposedData: Complex[][] = new Array(height).fill(new Array(width));
for (let y = 0; y < height; y++) {
for (let x = 0; x < width; x++) {
const c = spectrum[x][y].deepCopy();
transposedData[y][x] = c;
}
}
spectrum = transposedData;
console.log(spectrum);
这给了我一个2D数组,其每个元素都是Spectrum [127] [127]的值。 我做错了什么?
答案 0 :(得分:0)
找不到重复项,但是当您使用fill()时,它并没有为每个索引创建一个新数组,而是在使用相同的数组。
您的代码基本上就是这样
var myArr = new Array(3);
var row = new Array(3);
myArr[0] = row;
myArr[1] = row;
myArr[2] = row;
myArr[0][0] = 1;
console.log(myArr[0][0], myArr[1][0], myArr[2][0])
因此,当您更改索引时,它会更改所有数组的所有索引。无法填充以创建新的数组实例,因此您必须进行一些编码。
您将需要使用map()获得不同的数组。由于地图仅适用于定义的值,因此您必须先将其填充一些东西。
var foo = new Array(3).fill(null).map(() => new Array(3))
foo[0][0] = 1
console.log(foo)