2016-10-07 3 views
0

私はspotifyプレイリストからすべてのトラックを取り出す非常に簡単なアプリケーションを書いています。まず、AJAXリクエストを使用してトラックJSONオブジェクトを取得し、tracks[]という配列に配置します。コンソールに定義された文字列が未定義として印刷されるのはなぜですか?

次に、私はこの配列を反復処理し、各繰り返しで曲の名前と各トラックのアーティスト名の文字列を取り出します。私はこれらを集中した文字列に入れます。この文字列は、completeという新しい配列に格納されます。これはトラックごとに行われます。

基本的に、completeは、私は奇妙な問題を持っている。この時点で

[ 
    "Sympathy for The Devil, The Rolling Stones", 
    "Come Together, The Beatles", 
    ... 
] 

のようになります配列です。 chromeのデバッガによれば、配列completeには、その内部のすべての正しい値があります。しかし、私がconsole.logの要素をcompleteにしようとすると、値が 'undefined'になります。見知らぬ人ですが、私がconsole.logの式を使って2つの文字列を取得してステッチすると、正しい値が出力されます。

は、なぜこれが起こるんし、それが正しい値 ここ

保存されたJSONオブジェクトを反復処理し、新しい配列に格納したコードがあり

、およびプリント console.logことができますので、私はそれをどのように修正することができます。

function print() { 
    for(var x = 0; x < 4; x++) { 
     for(var n = 0; n < 100; n++) { 
      try { 
       //this logs correct 
       console.log(tracks[x].items[n].track.name + " " + tracks[x].items[n].track.artists[0].name); 

       //these have correct value 
       var deb = (tracks[x].items[n].track.name + " " + tracks[x].items[n].track.artists[0].name); 
       complete[z] = deb; 
       z++; 

       console.log(deb); //throws no error, prints fine 
       console.log(complete[z]); //prints undefined 

      } catch(err) { 
       //no exception ever thrown 
      } 
     } 
    } 
} 

私はあまりJSをやっていない、私は何かが明らかでない場合は申し訳ありません。

+1

'complete'を配列として宣言し、' z'をintとして宣言しましたか? –

+0

@Œlrimスクリプトの開始時に、この関数が呼び出されるかなり前に 'var complete = new Array(400);'これが間違っていると私は謝ります。 ) –

答えて

1

complete[z]を割り当てた直後に、zをインクリメントしています。印刷時には、complete[z]にはもうアクセスしませんが、まだ定義されていないcomplete[z+1]です。 console.logコマンドの後にインクリメントを移動してみてください。

+0

30秒以上叩いてください... – relic

+0

ああ、それはやります(初心者ミス、私は恥ずかしいです!)。いつものように、私は夜10時30分にプログラミングすべきではありません。あなたの誠実さのために@relicにも感謝します。 Lemmeは確かにテストし、私は最小限で –

+0

うん、問題thatsを受け入れるだろう。ありがとうございました。私はそれが私を可能にすると私はそれをやるだろうので、私は6分間受け入れることはできません。 –

1

上記の例では、配列に値を設定した後に、zが増えました(これは前に定義したと思います)。したがって、配列の値を設定するときにはcomplete[5](または何でも)に設定しましたが、配列範囲外の可能性が最も高いcomplete[6]を記録しています。

関連する問題