質問

私はフォームのobejctを持っています:

var test = {"2011":{"10":4,"9":9,"8":15,"7":11,"6":11,"5":13,"4":9,"3":5,"2":9,"1":4,"0":20},"2010":{"11":9,"10":23,"9":58}}

毎年と月のコンボを打つことができるように、これを反復したいと思います。私は持っている:

var years = d3.keys(test),
    months = d3.range(12),
    data = [];

だから、JavaScriptの初心者として、正気をチェックするために私が検査すること years.

document.writeln(years)
2011,2010 

かっこいいですが、私が反復しようとするとき years データを引き出すための配列 test 私がすることをする要素は、テストするのが正しいと思いますが、要素は失われます:

for(var y in years) {
  document.writeln(y);
}
0,1

どうすれば反復しますか years 実際の要素を取得するには(2011,2010)それらに?

役に立ちましたか?

解決

for in インデックス/キーを取得します(値ではありません)。

そうするように、ループを変更する必要があります:

for(var y in years) {
  document.writeln(years[y]);
}

編集 -MissingNoのコメントに従って、使用を使用して配列を繰り返します for in aです 悪いアイデア.

for(var i = 0, l = years.length; i < l; i++) {
  document.writeln(years[i]);
}

少し余分な情報...オブジェクトに対して/inループを使用すると、プロパティキーを繰り返します。例えば、

for(var y in test) {
  //This will yield, "2011" and then "2010"
  document.writeln(y);
}

他のヒント

私の知る限り、 var y in years あなたに与えます キー 配列に years. years[y] 実際の価値を与える必要があります。

Yは、0と1の年で要素にアクセスするインデックスになります(年は配列であるため)。したがって、年の値にアクセスするには、使用してみてください

writeln(years[y])

それ以外の

writeln(y)

(私見、JavaScriptはこのように作業することで少し直感的です)

JavaScriptで for in ループはあなたが彼らがしていると思うことをしません。彼らはあなたに要素ではなく鍵を与えます

あなたが欲しい

for(var y in years) {
  document.writeln(years[y]);
}

0,1を取り戻しているので、年は実際の配列のように見えますので、単に実行することもできます

for(var i = 0; i < years.length; i++) {
    document.writeln(years[i]);
}

また、あなたはすでにあなたのタイトルを編集しましたが、用語に関するメモです。文字列の場合、JSONです。それがオブジェクトである場合、まあ、それはオブジェクトです。 「JSONオブジェクト」や「JSONアレイ」などのものはありません

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top