带有字母数字键的Javascript多维数组

时间:2013-04-28 18:54:09

标签: javascript arrays object multidimensional-array

这似乎是我所看到的混淆的常见原因,显然我也不例外。我已经阅读了一些这方面的教程,我仍然无法理解它。从我可以收集的内容来看,Arrays是Javascript中的对象,就像字符串和其他变量类型一样。但我仍然不知道如何帮助我声明一个带有字母数字键的多维数组。

在PHP中,我可以简单地写一下:

$calendar = array();

foreach ($schedule->currentExhibitions as $key) {
    $calendar[$key["ExhibitionID"]]["startDate"] = date("Y,n,j", strtotime($exhibition["StartDate"]));
    $calendar[$key["ExhibitionID"]]["endDate"] = date("Y,n,j", strtotime($exhibition["StartDate"]));
} 

但是在Javascript中尝试类似的东西会产生错误。我应该创建一个数组并填充它对象吗?如果是这样,我该怎么做呢?或者我应该完全使用一个对象并跳过任何类型的数组? (如果是这样,我如何创建一个多维对象?)

抱歉新手问题!

4 个答案:

答案 0 :(得分:4)

如果您的键是严格的数字并且从零开始排序,那么数组是有意义的,您可以使用方括号表示法,就像在php中一样,但如果您想要多个维度,则需要初始化子数组:

var myArray = [];
myArray[0] = [];
myArray[0][0] = "something interesting";

如果您的键不是数字,有序且从零开始,那么您应该使用一个对象(所有键都是字符串),它仍然允许使用方括号表示法:

var myObject = {};
myObject["1A"] = {};
myObject["1A"]["3B"] = "something interesting";

答案 1 :(得分:3)

在Javascript中,数组是一个对象,其键是数字,顺序,索引。

只要您想使用字母数字(又称字符串)键,就可以使用常规对象。

在JS中做你想做的事,你会做以下事情(使用或多或少的你的PHP代码)。

var calendar = {};

Object.keys(schedule.currentExhibitions).forEach(function(key) {
  var ex = schedule.currentExhibitions[key];

  calendar[ex.exhibitionId] = calendar[ex.exhibitionId] || {}; //if the key doesn't exist, create it.
  calendar[ex.exhibitionId].startDate = date(); //some js date function here
  calendar[ex.exhibitionId].endDate = date(); //your js date function here
});

答案 2 :(得分:2)

我将Multidimension视为嵌套,并将多层嵌套视为复杂对象。例如:

var parent = [];//top holder
var child1 = {};
child1.name = "Jim";
parent.push(child1);

在这个简单的示例中,您可以像这样访问child1:

parent[0]["name"] //Jim

在某种程度上,这是多方面的。而不是使用["name"]作为索引器,或child1作为对象,它也可以是一个数组,如下所示:

var parent = [];//top holder
var child1 = [];
child1.push("Jim");
parent.push(child1);

在这个例子中,你可以得到Jim:

parent[0][0];//Jim

因此,对于复杂的示例,您可能有多个级别的这些嵌套(或维度)。

parent[0]["Child"].grandChild[5]["cousin"].name //etc

这只是前面例子的延续。

答案 3 :(得分:1)

如果要保留订单或想要通过数字索引访问,请使用数组。数组的值可以是单个值,也可以是对象或数组本身(因此数组中的每个值都可以包含多个简单值)。

如果您想通过唯一的字母数字键进行访问,请使用对象并为其指定属性。

数组有数字索引。它们没有字母数字索引。

对象有字符串键。

因为数组也是一个对象,它可以有两种类型的键,但使用字符串键不是数组访问,它访问对象的属性。

当您要求数组的.length时,您只获得数字索引的长度。它不包括对象的其他属性。

对象数组是javascript中非常实用的数据结构,当数字索引的顺序或索引很重要时,它经常被使用。

如果订单不重要或您不需要通过数字索引访问并且只想通过字母数字字符串访问,那么您应该只使用一个对象并使用您的字母数字字符串键设置其上的属性