[英]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.