3

複数レベルのJSONオブジェクトを次の形式で返すPHP関数があります

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

dataforループの最大値を初期化するための長さを取得する必要があります。これは、第1レベルのエントリの数を意味します。

data[1].length22を返し、プリントアウトdata[2].lengthを介して23を返します。console.logこれは予期されていますが、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 に答える