3

我有一个 PHP 函数,它返回格式为多级 JSON 对象

var data = {
  1 : { 
    1: { Object },
    2: { Object },
     ...,
     ...
  }, 
  2: {
    1: { Object },
    2: { Object },
    ...,
    ...
  }
}

我需要获取data初始化 for 循环最大值的长度。我的意思是第一级条目的计数。

data[1].length返回 22,并data[2].length通过console.log打印输出返回 23。这是预期的,但data.length返回未定义。

有没有比这更好的方法

var count = 0;

for (var i=1; i< Number.MAX_VALUE; i++){
  if (typeof data[i] != 'undefined')
    count = i;
}
4

4 回答 4

3

怎么样

Object.keys(data).length
于 2012-08-30T16:49:11.933 回答
1

如果可以控制 JSON 格式,嵌套数组似乎是更好的选择。

如果没有,你可以运行类似的东西

var length = 0;
for (var i in data) {
    if (isFinite(i) && i > length)
        length = i;
}
于 2012-08-30T16:34:17.540 回答
1

您可以计算循环中的条目数,如下所示:

var length = 0;
for (var key in data) {
  if (data.hasOwnProperty(key)) {
    length++;
  }
}

但是,如果您可以控制返回的数据,则返回数组而不是对象可能会更容易,因为数组已经具有您想要的长度属性。

于 2012-08-30T16:35:16.713 回答
0

为什么不这样做而不是分配数字属性?数组将具有您希望的长度属性:

var data = [
  [ 
    { Object },
    { Object },
     ...,
     ...
  ], 
  [
    { Object },
    { Object },
    ...,
    ...
  ]
]
于 2012-08-30T16:35:06.743 回答