如何在dc.js中的vars中放入过滤表达式?

How to put filteration expressions in vars in dc.js?

在我们的 dc.js powered d3.js 图表中。

尝试使用代码附加方法在 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 在控制台上 nothing 即将到来。通过这个,我的意思是什么都没有。没有未定义,没有对象,没有值,没有返回函数。 sourceDataForChart 是图表正在使用的数据

我需要实现一个分组需求,条件会很多。 我该怎么做?

我同意 Ethan 的观点,这是 JavaScript 问题。

通常您不希望函数在某些情况下会 return undefined,而在其他情况下会是一个值。您的变量 _dataFilter 只有在条件为真时才会被初始化 - 现在条件为假,因为 field1 为真。

事实上,只是因为 JavaScript 将所有变量提升到函数范围,所以变量在 returned 时甚至存在。所以也许这就是调试器报告没有值的原因。

更好的代码组织方式是

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;
});