Javascript での多次元配列の初期化について


これだとダメで

[code]

    var histArray = new Array(256);
    var histData = [histArray,histArray,histArray];
    for(i = 0; i < 3; i++){
        for(j = 0; j < 256; j++){
            histData[i][j] = 0;
        }
    }
    
[/code]

こっちだとちゃんと初期化されるんですが、これはなぜでしょうか？

[code]

    var histData = [histArray,histArray,histArray];
    for(j = 0; j < 3; j++){
        histData[j] = new Array(256);
        for(i = 0; i < 256; i++){
            histData[j][i] = 0;
        }
    }
    
[/code]




> var histData = [histArray,histArray,histArray];

histArray のインスタンス(実体)はただ一つですので、これでは常に

[code]

    histData[0][n] == histData[1][n] == histData[2][n] == histArray[n]
    
[/code]

となってしまいます。例えば histData[0][1] に値を代入すると、histData[1][1] と histData[2] [1] と
histArray[1] もその値と同じになってしまいます(全て同じインスタンスを指しているからです)。

ですので、以下の様にして初期化する必要があります。

[code]

    var histData = [new Array(256), new Array(256), new Array(256)];
    
[/code]

