0

JSON ファイルのデータから d3 を使用して積み上げ棒グラフを作成しようとしています。各バーには、特定の月の引き分け、負け、勝ちがあります。

JSON ファイル:

{
    "name": "FHS",
    "points": 3000,
    "ties": 3,
    "losses": 19,
    "wins": 50,
    "games": {
        "2010-09": { "ties": 1, "losses": 2, "wins": 16 },
        "2010-10": { "ties": 2, "losses": 5, "wins": 13 },
        "2010-11": { "ties": 0, "losses": 12, "wins": 21 }
    }
}

d3.json 機能を使用して、既に一部のデータを問題なく使用しています。例えば:

d3.json("data.json",function(error,data)
    {
        alert(data.name);
        alert(data.points);
        // etc.
    });

しかし、ここが興味深いところです (fyi、私は「ゲーム」の各プロパティを取得するためにアンダースコア ライブラリを使用しています...おそらくこれは私が間違っているところですか?)。次のことを試してみると:

_.keys(data.games).forEach(function(d)
    {
        alert(d);
    });

2010-09、2010-10、2010-11 が 3 つの異なるアラート ボックスに表示されます...完璧です! しかし、次のことを試してみると:

_.keys(data.games).forEach(function(d)
    {
        alert(d.ties);
    });

私は未定義になります:/実際、発生している別の問題は、

alert(data.games.2010-09.ties);

機能するはずです(プロパティ名が整数で始まっていないか、ハイフンが含まれていない場合...)が、リテラルの形式(「2010-09」)のために機能しません...だから、私の主な質問はネストされたオブジェクトのプロパティに動的にアクセスして、チャートを簡単に生成できるようにします。十分なコンテキストを含めようとしましたが、さらに情報が必要な場合はお知らせください。前もって感謝します!

4

2 に答える 2

2

値にアクセスするためにキーを囲むことができます。[""]つまり、機能しますalert(data.games["2010-09"].ties);。キーと値の構造を操作する d3 関数にも興味があるかもしれません。ドキュメントを参照してください。

于 2012-11-03T17:58:39.867 に答える
2

dによって返される文字列の配列を反復処理しているため、この関数内の は文字列 ("2010-09"、"2010-10"、"2010-11" など) であるため、警告ボックスで undefined になります_.keys(data.games)

したがって、は未定義であると予想される をalert(d.ties)呼び出すようなものです。alert("2010-09".ties)

しかし、ラーズの説明に基づいて、

_.keys(data.games).forEach(function(d)
{
    alert(data.games[d].ties);
});

データを取得する方法です。

PSconsole.log(data.games[d].ties)は、javascript をデバッグするためのより堅牢な方法です (したがって、通常は推奨される方法です)。

于 2012-11-04T03:10:12.383 に答える