1

私は以下を持っています

    var arrayT = new Array();
    arrayT['one'] = arrayT['two'] = new Array();
    arrayT['one']['a'] = arrayT['one']['b'] = '';
    arrayT['two'] = arrayT['one'];
    arrayT['two']['a'] = 'test';
    console.log(arrayT);

私が持っているコンソールで

    [one][a]='test'
    [one][b]=''
    [two][a]='test'
    [two][b]=''

なんで?

jsフィドル

4

3 に答える 3

3

この線

arrayT['one'] = arrayT['two'] = new Array();

単一の共有配列オブジェクトを作成します。2 次元配列の各「内部」配列は、実際には同じオブジェクトへの参照にすぎないため、1 つの「内部」配列を変更すると、まったく同じ方法で他の配列に影響を与える必要があります。

代わりに、2 つの別個の配列を作成します。

arrayT['one'] = new Array();
arrayT['two'] = new Array();

さらに、その変更を実装しても、次の行:

arrayT['two'] = arrayT['one'];

は同じ問題を引き起こします --arrayT['two']そしてarrayT['one']同じオブジェクトを指し、同様の性質の問題を将来引き起こす可能性があります (例えば、arrayT['two']['a']次の行を変更するarrayT['one']['a']と、同じオブジェクトを指しているため、次の行で変更されます)。

于 2013-05-13T15:12:00.407 に答える
3

arrayT['one']arrayT['two']は同じ配列であるため、一方に変更を加えると他方に影響します。

これを修正するには、別の配列を作成します。

arrayT['one'] = new Array();
arrayT['two'] = new Array();

を使用すると、同じ配列への複数の参照の問題が発生しますがarrayT['one'] = arrayT['two'] = new Array()arrayT['two'] = arrayT['one']同じ問題が発生します。arrayT['two']あなたのコピーを作成するにarrayT['one']は、次を使用する必要があります。

arrayT['two'] = arrayT['one'].slice();
于 2013-05-13T15:12:14.330 に答える