[英]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]=''
為什么?
線
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.