▽1
●
a-kuma3 ベストアンサー |
こんな感じのコードを動かしてみると、理由が分かると思います。
d3.csv("foo.csv", function(data) { console.log("(1)"); console.log(data); }); console.log("(2)");
出力は、
(1) Array [ Object, ...] (2)
ではなく、通常は、こうなります。
(2) (1) Array [ Object, ...]
d3.js では csv を取ってくるのに非同期で処理をします。
データ取得のメソッドを呼ぶと、データの到着を待たずにメソッドからすぐに戻ってきます。
渡したコールバック関数は、データを取得したときに呼び出されます。
# d3.csv(url, accessor], callback])
CSV ? mbostock/d3 Wiki ? GitHub
Issues an HTTP GET request for the comma-separated values (CSV) file at the specified url. The file contents are assumed to be RFC4180-compliant. The mime type of the request will be "text/csv". The request is processed asynchronously, such that this method returns immediately after opening the request. When the CSV data is available, the specified callback will be invoked with the parsed rows as the argument.
なので、d3.csv の後に書いたコードの方が先に実行され、d3.csv に渡したコールバックの方が後で実行される、というふうになります。
一番、単純な対応はコールバック関数の中に、パラメータを使った初期設定の処理を記述することです。
//CSVファイルからクイズのタイトルを読み取る var dataset0 = []; d3.csv([parafilename], function(data) { //CSVファイルのタイトルの一行目の文字だけを選択する。 title0 = data.map(function(d) { return d[para]; }); title = title0[0]; console.log(dataset0); //★ 初期設定は、ここでやる });