2011-02-08 68 views
0

想象一下以下情况:有没有一种方法可以安全地引用Javascript多维数组?

var array = new Array ([0,0,0,0], [0,0,1,0], [0,0,0,0]); 
var x = 0; var y = 0; 
if(array[y][x]) { 
// x and y can be any integer 
// code should execute only for array[1][2] 
} 

xy是指一个项目存在的阵中,一切都很好。否则,该脚本终止。显然,这不是我想要的行为 - 是否可以安全地引用Javascript多维数组?

+0

如果你想安全地使用你的数组,你应该在if语句中检查你的数组维数,然后使用它。 – Eduard 2011-02-08 15:34:23

+1

你不是说代码只能执行`array [1] [2]`? – user113716 2011-02-08 15:52:59

+0

@帕特里克:谢谢,编辑。你有了主意,对吧?这只是一个快速通用的例子:) – 2011-02-08 17:31:13

回答

1

需要检查所引用的特性存在于阵列的每个电平:

if(array[y] && array[y][x]) { 
// x and y can be any integer 
// code should execute only for array[2][1] 
} 
0

可以使用in关键字来检查是否有该阵列的第y个元件,以及是否该元素具有第x个元素作为初步检查:

if (y in array && x in array[y] && array[y][x]) {... 

JavaScript数组与其说是多维因为它们是化合物/锯齿状。您也可以使用Array.length,但这依赖于作为数组的对象,这是我们正在检查的内容的一部分,因此使检查复杂化。

0

一点比其他的答案更详细:

var array = [ [0,0,0,0], [0,0,1,0], [0,0,0,0] ]; 
var x = 0; var y = 0; 
if(array.hasOwnProperty(y) && array[y].hasOwnProperty(x) && array[y][x] !== 0) { 
    // x and y can be any integer 
    // code should execute only for array[2][1] 
} 

...但是这个人是不受补充Array.prototype

此外,显式测试与零相等使它更具可读性,恕我直言。 (补偿前面条件的可读性降低...:-P)

相关问题