【发布时间】:2013-08-23 17:20:31
【问题描述】:
我正在整理一些 JavaScript,这些 JavaScript 将提取多个 JSON 文件,这些文件的数据将在图表中使用。最终,我需要确定何时到达$.each() 循环中正在处理的关联数组的绝对末端(涉及jQuery),以便触发下一个JSON 文件。我遇到了针对单层对象的各种解决方案……但是多层对象呢?最后一列的最后一行怎么知道是 LAST?
这是我正在使用的 JSON 示例:
{
"Network":{
"Hardware":262464,
"Software":53016,
"Internal Personnel":440202,
"External Personnel":188658,
"Outside Services":1344100,
"Facilities and Overhead":16172,
"Other":92588,
"Total":2397200
},
"Wide Area Network":{
"Hardware":75600,
"Software":18900,
"Internal Personnel":132300,
"External Personnel":56700,
"Outside Services":315000,
"Facilities and Overhead":6300,
"Other":25200,
"Total":630000
}
}
这是我在 JSON 上运行的循环的粗略概念
function buildColumns(array, parent) {
$.each(array, function(key, value) {
var newParent = $('<column>');
$('<columnBox>').append($('<h2>').html(key)).append(newParent).appendTo(parent);
if(value instanceof Object) buildColumns(value, newParent);
});
}
如您所见,循环是伪递归的,最终可能不是我使用的。但是你去吧。
【问题讨论】:
-
我真的不明白问题出在哪里。你是说你的JS代码不行?
-
在 $.each 使用 .length 获取对象/数组的长度之前,然后当您在 $.each 内部循环时,您可以获得每个子数组/层的长度并重复处理直到从 $.each 返回的索引与长度匹配:)
-
@A.O.你应该移动你的评论来回答。
-
@ExplosionPills:javascript 工作正常。我只需要修改它,使其能够识别多维对象中的绝对最后一项。事实证明,对象本身并不具有与简单数组相同的可发现特征。获取诸如子数组长度之类的信息,或者当它具有基于文本的键时通过其数字索引选择一个项目,则更加难以捉摸。那些该死的对象不想成为数组,小虫子!
-
JS 中没有关联数组这种东西。 JSON 是一个与 JS 对象具有不同规范的字符串,它恰好看起来像 JSON。对于表格数据,典型的方法是使用每行有序标题的数组和第二个行数据对象数组。迭代行数据,然后对于每一行,迭代 headers 数组并通过索引到该列(标题)的行对象来发出单元格数据。基本上,我提倡重新考虑您的设计和数据结构,这样您就不必担心对象排序(即使现在已经得到保证)。
标签: javascript arrays json loops object