4

私のJSONはajaxリクエストによって返され、data変数に格納されています。

JSON は次のようになります (一番上の行は郵便番号/郵便番号で、リクエストごとに異なります)。

  {
      "ML1 4EQ":{
          "ExchangeCode":"WSMOT",
          "ExchangeName":"MOTHERWELL",
          "Options":{
              "10":{
                  "Preference":"3rd Party Tail (TTB)",
                  "Supplier 1":9591,
                  "Supplier 2":3581,
                  "Wholesale":5200,
                  "RRP":6500
              },

など、その他の 9 についても同様Optionsです。

        }
    }
}

返される数を数えようとしていますOptionsが、他の質問を読んで試したことはすべて、未定義を返すことから、3代わりに返すだけでうまくいかないようです10(間違ったレベルを数えていたと思います)。

これらには以下が含まれます

var key, results = 0;
for (var k in data) { // only simple cross browser way to get the first property
    var obj = data[k];
    for (key in obj) {
        results++;
        count = results;
    }
    return; // no need to go further, we have counted the options in the postcode object
}
4

2 に答える 2

6

これにより、最初のオブジェクト内のオプションの総数がカウントされます。

var count = 0;
for(var key in data){
  for(var i in data[key].Options){
    count++;   
  }
  break;
}

フィドル

于 2013-07-16T08:24:18.233 に答える
1

内のプロパティの数を数えるのはObject簡単ではありません。直接教えてくれるプロパティはありません。for...inそれらを数えすぎると、継承されたプロパティも取得されるため、誰かが何かを定義してObject.prototypeいると、間違った答えが得られます。

ECMAScript 第 5 版getOwnPropertyNamesでは、継承されていないプロパティ名の配列を返します。

var options= {'1': 'a', '2': 'b'};
Object.getOwnPropertyNames(options).length; // 2

第 5 版をまだサポートしていないブラウザー (主に IE<=8) の場合は、shim を使用できます。

if (!('getOwnPropertyNames' in Object)) {
    Object.getOwnPropertyNames= function(o) {
        var names= [];
        for (var k in o)
            if (Object.hasOwnProperty(k))
                names.push(k);
        return names;
    };
}

ただし、JSON 出力の形式を制御できる場合は、オブジェクトを単純な配列に変換することを強くお勧めしますOptions。これにより、データがより適切にモデル化されるようです。配列を使用すると、簡単に使用できますOptions.length

于 2013-07-16T08:29:48.850 に答える