簡體   English   中英

JavaScript二維數組

[英]JavaScript 2dimensional array

我有以下

    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]=''

為什么?

jsFiddle

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

創建一個共享數組對象 二維數組中的每個“內部”數組實際上只是對同一對象的引用,因此更改一個“內部”數組將必然以完全相同的方式影響另一個。

而是創建兩個單獨的數組:

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

此外 ,即使您實施了該更改,該行也會:

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

會產生相同的問題arrayT['two']arrayT['one']將指向同一對象,可能會導致類似性質的未來問題(例如,更改arrayT['two']['a']在下一行將更改arrayT['one']['a'] ,因為它們指向同一對象)。

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']的副本,您應該使用以下命令:

arrayT['two'] = arrayT['one'].slice();

雖然apsillers的回答是正確的,但更准確的替代方法是只寫arrayT['two'] = arrayT['one'].slice(0)arrayT['two']第2行中對arrayT['two']的分配。注意,這只是一個淺表副本。 如果您以后決定使用可變對象,則可能需要根據需要進行深度復制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM