我不在我的电脑上,所以我会尽快解释这个:
我有一个2D数组
var myArray[x][y] = 0;
我希望看到我已经完成了哪个数组,所以我想将值'0'更改为'1'。
好吧,我想说我会从
开始myArray[0][0] = 0;
我想将值'0'更改为'1' 所以我做了
myArray[x][y] = 1;
然后我会去下一个
myArray[0][1] = 0
我会再次将该值更改为1,如此
myArray[x][y] = 1;
myArray[x][y]
应该代表我目前正在使用的数组。
但在我将myArray[0][1]
的值更改为'1'之后,
myArray[0][0]
的值再次变为'0'。
我想这是因为我使用myArray[x][y]
而不是确切地声明应该更改哪个数组。
但我怎么能解决这个问题?
我希望这个解释不会太混乱:S
提前致谢!
答案 0 :(得分:1)
你说:
myArray [x] [y]应该代表我目前正在使用的数组。
那不是真的。您似乎正在使用x
和y
来尝试访问最近修改的两级数组值的索引,但Javascript中没有这样的语法。你有没有在某个地方看到这个?
x
和y
只是两个包含值的变量。根据您的描述,看起来您x
和y
都设置为0.所以当然myArray[x][y]
会引用myArray[0][0]
。没有“最后一个索引”的事情发生 - 它们最重要的变量充当分配给它们的值的占位符,就像所有变量一样。
一种风格考虑:你应养成明确声明变量的习惯。如果不这样做,它们将被隐式声明为全局范围的成员,这意味着当两个不同的函数访问同一个变量时,您可能会得到意外的结果。相反,可以在最近的函数范围内声明变量,如下所示:
var x = 0, y = 0;
// now use x and y
另外,请注意Javascript实际上没有2D数组。您可以使用嵌套数组来模拟它们(正如您所做的那样)。但是可以像myArray[0, 1]
那样访问真正的2D数组。因此,您必须完成将每个顶级数组元素指定为表示第二个维度的数组的工作。我会避免称它为2D数组,这样你就不会误导别人,也不会让别人解释你已经知道的东西。
<强>更新强>
在评论中,您说要逐步将每个0转换为以下数组结构中的1:
var myArray = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]];
我可以问你为什么要这样做?难道你不能轻易使用计数/位置变量(称之为x)来记录下一个要改变的位置吗?否则你基本上只是做一元计数。但你可以做1 = 1,11 = 2,111 = 3,1111 = 4,11111 = 5,11111 = 6,等等。
此外,还不清楚当您耗尽第一个子元素阵列时会发生什么。你想继续下一个吗?然后确实声明x
和y
并使用它们来跟踪位置。增加x,当它超过子数组大小时,将其重新设置为0并递增y。您会发现,如果您的数组只能包含零和1,那么您甚至不需要数组。然后,x和y值将存储整个事物的一种“压缩”版本。