【发布时间】:2019-07-07 11:12:12
【问题描述】:
我一直在尝试在 ES6 中转置一个矩阵(类似二维数组),但 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);
这给了我一个二维数组,其中的每个元素都是频谱[127][127] 的值。 我做错了什么?
【问题讨论】:
-
const c在循环内部感觉不正确....有趣的是,您在其他地方使用var。可能应该是let和let c在循环之外。 -
需要找到 fill() 的欺骗......你正在用相同的数组填充每一行......
-
我猜
deepCopy没有按照您的想法进行操作,并且您正在经历对象突变:stackoverflow.com/questions/42416863/avoiding-object-mutation -
与var和copy无关
-
deepCopy使用与原始 Complex 对象相同的值返回一个新的 Complex 对象,例如deepCopy() {return new Complex(this.real, this.imag)}。这似乎会引发对象突变?
标签: javascript arrays typescript for-loop