【发布时间】:2010-05-22 02:15:35
【问题描述】:
我将表单中的信息连续收集到数组中,如下所示:
list = {"name" : "John", "email" : "name@domain.com", "country" : "Canada", "color" : "blue"};
identifier = "first_round";
list = {"name" : "Harry", "email" : "othername@domain.com", "country" : "Germany"};
identifier = "second_round";
我想将它们组合成一些东西(我可能在需要括号的地方有大括号),例如:
list_all = {
"first_round" :
{"name" : "John", "email" : "name@domain.com", "country" : "Canada", "color" : "blue"} ,
"second_round" :
{"name" : "Harry", "email" : "othername@domain.com", "country" : "Germany"}
};
所以我可以像这样访问它们:
alert(list_all.first_round.name) -> John
(注意:两个list-array中的name-values(“name”、“email”、“color”)并不完全相同,每个list-array中的项目数是有限的,但在提前;我需要每轮只向前一个结构连续添加一个数组,并且可能有任意数量的轮,即“第三轮”:{...},“第四轮”:{...}和等等。)
最终,我希望它能够很好地解析为 JSON。
如果有帮助,我会使用 jquery 库。
【问题讨论】:
-
附带说明,如果您像
for(var key in list_all)那样枚举list_all 的属性,则无法保证属性的顺序。即使首先定义了“first_round”,您也可能在“first_round”之前获得“second_round”。如果您希望保留订单,请改用数组。见 - stackoverflow.com/questions/648139/… -
但是对象的属性顺序什么时候重要呢?如果顺序很重要,那么 Array 是要使用的类型。
-
@Sean - 当你想用一个键直接访问元素,但同时又想按顺序遍历所有元素时。认为有人可能想要它并不荒谬 - Ruby 在 1.9 中更改了 Hash 的实现以保证顺序,因为有人想要它。
-
唯一的问题是 ES262-3 规范声明迭代是否有序取决于实现——你根本不能依赖它——所以你不应该依赖它。而且我仍然看不到任何人需要保持订单的原因。
-
我实际上是在说同样的事情 - 您不应该依赖枚举属性的顺序。至于第二点,为什么有人想要使用键直接访问包含的对象以及对所有元素的有序访问,有很多例子。从宏观角度来看,考虑这一点 - 有无数个列表,其中顺序很重要,但同时列表中的每个项目都有一些独特的属性,基于这些属性可以立即且明确地识别它。为了表示这样的结构,我们需要保持顺序。
标签: javascript jquery json arrays