2016-08-26 4 views
0

私たちのdc.jsは、d3.jsのチャートを掲載しています。dc.jsのvarsにフィルター式を入れる方法は?

crossfilter'sfilter関数内のいくつかのブール式を、コード追加アプローチを使用して連結しようとしています。

var field1 = true, 
 
    field2 = "XYZ", 
 
    field3 = "ABC", 
 
    field4 = 1 
 
var filteredData = jsonObject.filter(function(d) { 
 

 
    //condition 1 
 
    if (field1 != true && field2 != "GHI") { 
 
    var _dataFilter = d.FieldOne >= field1 && 
 
     d.FieldTwo <= field2 && 
 
     d.FieldThree == field3 && 
 
     d.FieldFour == field4 
 
    } 
 

 
    return _dataFilter; 
 
}); 
 

 
console.log("FieldOne " + field1 + " FieldTwo " + field2 + " FieldThree " + field3 + " FieldFour " + field4); 
 

 
var sourceDataForChart = crossfilter(filteredData);

私は_dataFilterがコンソール上として来ていることを発見しています。これによって、私は文字通り何も意味しません。未定義、オブジェクトなし、値なし、返される関数はありません。 sourceDataForChartは、チャートで使用されているデータです

私はグループ要件のためにそれを実装する必要がありますが、多くの条件があります。 どうすればよいですか?

+0

何 'jsonObject'ように見えるんだろうか? Crossfilterの質問に似ているわけではありません。クロスフィルターに入れる前にデータをフィルタリングしようとしていると思われます。これは純粋なJavascriptの問題ですか? –

答えて

0

私はEthanとJavaScriptの質問に同意します。

通常、ある状況ではundefinedを返す関数と、それ以外の場合は値を返すことは望ましくありません。変数_dataFilterは、条件が真である場合にのみ初期化され、今はfield1が真であるため、条件は偽です。

実際、JavaScriptが返されたときに変数が存在する場合でも、すべての変数が関数スコープに持ち込まれるからです。だから多分これがデバッガが価値を報告していない理由です。

コードのためのより良い組織が

var filteredData = jsonObject.filter(function(d) { 
    var _dataFilter = false; 
    // condition 1 
    if (field1 != true && field2 != "GHI") { 
     _dataFilter = d.FieldOne >= field1 && 
     d.FieldTwo <= field2 && 
     d.FieldThree == field3 && 
     d.FieldFour == field4 
    } 
    else if (/* more conditions */) { 
     _dataFilter = /* ... */ 
    } 
    return _dataFilter; 
}); 
関連する問題