如何在多维数组中访问值?

时间:2012-06-24 00:31:41

标签: javascript

我有以下代码:

<html>
<body>
<div style="background-color: lightblue;" onClick="alert(myArray[0][1])">
this is a div
</div>

<script type="text/javascript">
var myArray = new Array();
myArray[0][0] = 0;
myArray[0][1] = 00012;
myArray[0][2] = 00006;
myArray[1][0] = 1;
myArray[1][1] = 00004;
myArray[1][2] = 00001;
</script>
</body>
</html>

当我点击div时,没有任何反应;没有警报。但是,当我将警报内部更改为字符串(例如“test”)时,会出现警告框。

我做错了什么?如何在多维数组中获取项的值?

谢谢!

3 个答案:

答案 0 :(得分:2)

像这样写出来:

<div style="background-color: lightblue;" onClick="alert(myArray[0][1])">
    this is a div
</div>

<script type='text/javascript'>
    var myArray = [];
    myArray.push([0, 00012, 00006]);
    myArray.push([1, 00004, 00001]);
</script>

修改

问题是当你写这个:

var myArray = new Array();
myArray[0][0] = 0;

myArray 中的第一项是未定义的,因此您无法对其进行任何操作。使用此方法,您必须首先创建数组:

var myArray = new Array();
myArray[0] = new Array();
myArray[0][0] = 0;

但我认为使用 push 的方形符号的方法更清晰。

答案 1 :(得分:2)

这是你声明一个多维数组的方法:

MultiArray = new Array(2)

MultiArray [0] = new Array(2)

MultiArray [0][0] = "Tom"

MultiArray [0][1] = "scientist"

MultiArray [1] = new Array(2)

MultiArray [1][0] = "Beryl"

MultiArray [1][1] = "engineer"

答案 2 :(得分:2)

代码的第一行:

var myArray = new Array();

...将创建一个没有元素的新的单维数组myArray。然后当你说:

myArray[0][0] = 0;          

...您正在尝试访问尚不存在的维度。也就是说,myArray[0]undefined,因为虽然myArray是一个数组,但它还没有任何元素 - 所以myArray[0][0]就像在说undefined[0]

这就是为什么你必须指定myArray[0]来引用新阵列才能访问myArray[0][0]。同样的事情也适用于myArray[1],因为JavaScript本身没有多维数组,它有数组数组。这就是您所需要的(对现有代码进行最小的更改):

var myArray = [];
myArray[0] = [];
myArray[0][0] =  00012;
myArray[0][1] = 00012;
myArray[0][2] = 00006;
myArray[1] = [];
myArray[1][0] = 1;
myArray[1][1] = 00004;
myArray[1][2] = 00001;

请注意,[]相当于new Array()

更容易阅读和输入选项是通过数组文字语法创建子数组:

var myArray = [];
myArray[0] = [00012, 00012, 00006];
myArray[1] = [1, 00004, 00001];

或者,最简单的(特别是如果这些是硬编码的值)是通过嵌套数组文字在一个语句中创建整个事物(忽略空格):

var myArray = [
                [00012, 00012, 00006],
                [1, 00004, 00001]
              ];

(另请注意,对于数字数据,前导零将消失:如果要保留零,请使用字符串("00012"而不是00012)。)