0

我正在整理一些 JavaScript,这些 JavaScript 将提取多个 JSON 文件,这些文件的数据将在图表中使用。最终,我需要确定何时到达$.each()循环中正在处理的关联数组的绝对末端(涉及 jQuery),以便触发下一个 JSON 文件。我遇到了针对单层对象的各种解决方案……但是多层对象呢?最后一列中的最后一行如何知道它是最后一行?

这是我正在使用的 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);     
    });
}

如您所见,循环是伪递归的,最终可能不是我使用的。但是你去。

4

2 回答 2

1

length您可以使用该属性找出数组中有多少项。

因此,在您的示例array.length中将返回项目数。假设传递的变量是一个数组。

您可以对对象执行此操作的方式是:

Object.keys(jsonObject).length

此外,由于我不确定您要查找的长度是数组还是对象,所以您可以使用下面的代码向count对象添加方法以查找它有多少个子对象:

Object.prototype.count = function() {
  oCount = 0; 
  for(var curObj in this) 
    if(curObj.hasOwnProperty(prop)) oCount++; 
  return oCount;
};

要这样使用:

console.log(jsonObject.count());
于 2013-08-23T17:24:13.067 回答
-1

JavaScript 对象的字段顺序不保证是一致的。无论是随着时间的推移还是在不同的浏览器之间。请参阅此处:JavaScript 是否保证对象属性顺序?

所以最后一项并不总是相同的。

如果你想拥有最后一项,你需要将你的对象重新设计成一个数组。

{
    "Network": [
         [{"Hardware":262464}],
         [{"Software":53016}],
         //  ...
    ],
    "Wide Area Network":[
        [{ "Hardware":75600}],
        // ...
    ],
    // ...
}

于 2013-08-23T17:57:03.513 回答