2016-11-30 11 views
0

JavaScriptを使用してJSONオブジェクトに含まれる要素の数を調べる方法がわかりません。これは私のオブジェクトが構成されている方法です。 jsonオブジェクトの要素数を調べる

var shows = []; 
//make http call here to api url and store in variable called 'data' 
for (int i = 0; i < data.length; i++) { 
    var element = { 
    "location": { 
     "latitude": data[j].venue.latitude, 
     "longitude": data[j].venue.longitude 
    }, 
    "artist": data[j].artists[0].name, 
    "venue_name": data[j].venue.name, 
    "date": data[j].datetime 
    }; 
    shows.push(element); 
}; 

は、だから私は、私がアクセスを希望 shows[i].locationを使用するか、どんなキーで簡単に要素にアクセスすることができます。しかし、このトピックをカバーするすべての質問/回答は、要素の数を見つけるために、 Object.keys(shows).lengthを推奨しているようです(私はこのfor each要素のためにfor-eachループを動かすこともできませんでした)。

しかし、これは私のケースでは機能しません(「ショー」には直接キーがないためです)ので、要素の数にアクセスする他の方法があるかどうか疑問に思っていました4つのキー:値のペア)が「ショー」の内側にありますか?または、すべての要素を繰り返し処理する別の方法がありますか?それが不可能な場合は、要素の数を見つけやすくするためにオブジェクトを構造化する別の方法がありますか?どんな助けでも大歓迎です!

+3

['length'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/length)プロパティを探していますか? 'shows.length'は、偶然にも' data.length'と等しくなります。サイドノート:これは「jsonオブジェクト」ではありません。 JSONは、データに変換できるテキスト形式です。あなたが持っているのは、オブジェクトの配列です。 –

+1

'これは私のオブジェクトがどのように構造化されているか' - オブジェクトの配列です...配列の長さはdata.lengthになります –

+4

'int i = 0 '(これは有効なJavaScriptでさえも)であるが、エラーを引き起こす 'data [j]'を参照する。 –

答えて

0

考える

[A] NY(4キーでそれぞれ:値対)の要素の数にアクセスするための他の方法「を示す」の内側にあります。

あなたが話している「要素の数」は、オブジェクトをプッシュしている配列の長さです。プッシュされたオブジェクトにはそれぞれ4つのキーと値のペアがあります。

あなたが(または配列で)を使用して要素の数(配列の長さ)を決定します:あなたのコードで

var lengthOfShows = shows.length; 
for (var i = 0; i < shows.length; i++) { 
    var currentShow = shows[i]; 
    // references 
    // shows[i].location 
} 

を...

for (int i = 0; i < data.length; i++) { 

はする必要があります...

for (var j = 0; j < data.length; j++) { 

forループ内でdata [j]を参照しているためです。

+0

それは感謝します。申し訳ありませんが、質問はとても混乱していました。私は自分のJava/javascriptを混ぜていて、自分のコードを直接貼り付けるべきでした。しかし、何らかの理由でshows.lengthが0を返していますが、show [0] .artistは実際の文字列を返します(つまり、私が想定している要素が0以上あることを意味します)。別の関数でオブジェクトを塗りつぶしてから、show.lengthを別の関数で呼び出すため、これがスコープの問題であるかどうかはわかりません。しかし、私はshow [0] .artistを正しく呼び出すことができるので、これは私を混乱させます(data.lengthも同じではありません)。 – crispEtomE

+0

配列を生成するために使用しているforループを確認してください;上のコードでは 'i'、ループの内部では' j'を使っています...これは奇妙な結果をもたらす可能性があります。 – rfornal

0

コードからは、showsが配列です。配列にはlengthプロパティがあります。
shows.length

です。同じデータがdata.lengthと と同じように見えますが、そのデータはおそらく配列でもあります。

関連する問題