2017-03-13 4 views
1

私は私のコードでこれを持っているよりも位置して列を識別:4列のデータのテーブルがあるので、DTAむしろ名前

_currentData = dta.map(function(d) { 
     return { 
      "Filter_1": d.Company, 
      "Filter_2": d.Continent, 
      "Dt": parseDate(d.Dt), 
      "amount": +d.NumUsers 
     }; 
    }) 

- そのヘッダーはCompany/Continent/Dt/NumUsers

あり、それは列を識別することが可能ですヘッダーではなくその位置によって表示されます。私は、次のどちらも作品を試してみました:

_currentData = dta.map(function(d) { 
     return { 
      "Filter_1": d[0], 
      "Filter_2": d.Continent, 
      "Dt": parseDate(d.Dt), 
      "amount": +d.NumUsers 
     }; 
    }) 

_currentData = dta.map(function(d) { 
     return { 
      "Filter_1": d.columns(0), 
      "Filter_2": d.Continent, 
      "Dt": parseDate(d.Dt), 
      "amount": +d.NumUsers 
     }; 
    }) 
+0

したがって、 'dta'は' d3.csv'から受け取ったオブジェクトの配列ですか? – inspired

+0

@whytheq将来のユーザーのためにこの質問を見つけやすくするためにタイトルを編集しました。 –

+0

@GerardoFurtado全く問題ありません – whytheq

答えて

3

標準答えはノーだろう。あなたのmap機能dでこのように、...

{Company: "foo", Continent: "bar", Dt: "baz", NumUsers: "foobar"} 

...とない配列オブジェクトあるので、それが最初で、誰が最後で誰言うことは不可能です:あなたが保証することはできませんオブジェクト内のプロパティの順序

、これらの機能の両方が配列を作成します。

しかし、D3のV4を使用して、あなたがデータをロードするためにd3.csvd3.tsvを使用している場合...その位置によって列を識別するための方法がありますプロパティcolumnsという名前で、データの最初の行(ヘッダー)が配列として格納されます。

var columns = data.columns; 

どの、あなたのデータのために、このようになります。:だから、あなただけ必要、その後

["Company", "Continent", "Dt", "NumUsers"] 

を使用しているあなたのmap機能でcolumns配列:ここで

var _currentData = data.map(d => { 
    return { 
     "Filter_1": d[columns[0]], 
     "Filter_2": d[columns[1]], 
     "Dt": d[columns[2]], 
     "amount": d[columns[3]] 
    }; 
}); 

デモです:

var data = d3.csvParse(d3.select("#csv").text()); 
 

 
var columns = data.columns; 
 

 
var _currentData = data.map(d => { 
 
    return { 
 
    "Filter_1": d[columns[0]], 
 
    "Filter_2": d[columns[1]], 
 
    "Dt": d[columns[2]], 
 
    "amount": d[columns[3]] 
 
    }; 
 
}); 
 

 
console.log(_currentData);
pre{ 
 
    display: none; 
 
    }
<script src="https://d3js.org/d3.v4.min.js"></script> 
 
<pre id="csv">Company,Continent,Dt,NumUsers 
 
foo,bar,baz,foobar 
 
foo2,bar2,baz2,foobar2 
 
foo3,bar3,baz3,foobar3 
 
foo4,bar4,baz4,foobar4 
 
</pre>

+0

説明のためにありがとうgerardo – whytheq

関連する問題