For循环仅给出数组的最后一个值

时间:2019-02-13 15:02:19

标签: javascript arrays typescript for-loop

我一直在尝试在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]的值。 我做错了什么?

1 个答案:

答案 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)