3

从我所见,这似乎是一个常见的混淆来源,显然我也不例外。我已经阅读了一些关于此的教程,但我仍然无法完全理解它。据我所知,数组是 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

4 回答 4

4

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

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

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

var myObject = {};
myObject["1A"] = {};
myObject["1A"]["3B"] = "something interesting";
于 2013-04-28T19:02:08.747 回答
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
});
于 2013-04-28T19:03:01.960 回答
2

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

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

这只是前面示例的延续。

于 2013-04-28T19:02:28.530 回答
1

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

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

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

对象具有字符串键。

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

当您询问.length数组时,您只会得到数字索引的长度。它不包括对象的其他属性。

对象数组在 javascript 中是一种非常实用的数据结构,并且在数字索引的顺序或索引很重要时经常使用。

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

于 2013-04-28T19:00:06.827 回答