标识JavaScript对象或关联数组中的最后一项

时间:2013-08-23 17:20:32

标签: javascript arrays json loops object

我正在整理一些JavaScript,它们将引入多个JSON文件,这些文件的数据将用于图形中。最后,我需要确定何时达到在$.each()循环(涉及jQuery)中处理的关联数组的绝对结束,以便触发下一个JSON文件。我已经碰到了一个单层对象的各种解决方案......但是对于一个MULTI-TIERED对象呢?最后一列中的最后一行如何知道它是最后一行?

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

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

2 个答案:

答案 0 :(得分:2)

您可以使用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());

答案 1 :(得分:0)

不保证JavaScript对象的字段顺序是一致的。无论是时间还是不同浏览器之间。见这里:Does JavaScript Guarantee Object Property Order?

所以最后一项并不总是一样。

如果您想拥有最后一项,则需要将对象重新编写为数组。

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