2016-11-17 73 views
1
var arr = [[],[]]; 
var si = 5; 
var c = 0; 
if (arr[si][c] == null) 
{ 
    arr[si][c] = { 
      code : "Test", 
    }; 
} 
alert(arr[si][c].code); 

你好,我想运行这个示例代码,但我得到一个错误,说未定义的属性“0”不能被调用。为什么我得到这个二维数组的错误?

尴尬的是,如果我使用数值而不是变量“si”和“c”作为索引,则错误不会显示!

是否有可能在JS中不能使用变量作为索引?我认为它适用于非二维数组。

谢谢你和问候

+4

不是2D阵列 - 其arrawys的阵列。 –

+0

[如何在JavaScript中创建二维数组?](http://stackoverflow.com/questions/966225/how-can-i-create-a-two-dimensional-array-in-javascript) – Liam

+0

另请参阅http://stackoverflow.com/questions/39325636/porting-c-sharp-3d-array-to-js-3d-array/39328793#39328793,有一种建议的迷你图书馆的一种多维JS阵列。它是3维的,但你肯定可以修改为2。 –

回答

6

JavaScript没有二维阵列中的任何概念。只是包含其他数组的数组。

arr[si][c]arr[5][0]

arr是具有两个成员(01),其中的每一个是一个数组的数组。

当你访问arr[5]时,你得到undefined,因为你已经超越了最后。

undefined[0]是一个错误。

的尴尬的事情是,如果我用的不是变量“SI”和“c”为指标的数值,错误显示不出来!

如果使用文字而不是变量,则会出现相同的错误。推测你的工作测试涉及不同的号码。

var arr = [[],[]]; 
 
if (arr[5][0] == null) 
 
{ 
 
    arr[5][0] = { 
 
      code : "Test", 
 
    }; 
 
} 
 
alert(arr[5][0].code);

+0

嗨,谢谢你的解释。但是,我如何创建一个二维数组呢?索引应该是我从数据库中获得的数字。所以它不会是0 - N,而更像是5,10,100,200,300,300,400,500。 – Wintersun

+0

@Wintersun - 你不能。我把你回到答案的第一句话。你必须在你想要的外部数组的索引处显式地创建一个数组。 – Quentin

0

,你可以尝试先检查是否arr[si].length-1是大于或等于c。是这样的:

if((arr[si].length-1)>c) 
0

您在定义arr访问没有定义的数组索引 arr[5]5,因为有两个元素[][],以便它有指数01所以如果你设置si10它会工作。

var arr = [[],[]]; 
 
var si = 1; 
 
var c = 0; 
 
if (arr[si][c] == null) 
 
{ 
 
    arr[si][c] = { 
 
      code : "Test", 
 
    }; 
 
} 
 
alert(arr[si][c].code);

相关问题