如何在dc.js中将过滤表达式放入变量中
How to put filteration expressions in vars in dc.js?
在我们的dc.js
供电d3.js
图中
尝试使用代码附加方法在交叉过滤器的filter
函数中连接几个布尔表达式。
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问题。
通常您不希望函数在某些情况下返回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;
});
相关文章:
- 在正则表达式中使用变量
- 使用一个表达式将两个变量分配给相同的值
- 从javascript表达式(Rhino)中获取变量
- 如何通过jsp表达式标记将java字符串变量传递给javascript函数
- 变量与表达式作为Javascript参数
- Javascript 复杂的正则表达式与变量
- Jquery 替换所有文本语法正则表达式中的变量
- 在 ng-include 中使用变量作为表达式
- 用于比较 HTML 标记内的变量的正则表达式
- 将变量传递到CasperJS中的XPath表达式中
- jstl-如何将表达式语言变量传递给javascript警报
- javascript中正则表达式(match)中变量的使用错误
- 如何将变量表达式转换为可执行代码(而不是替换值)
- javascript正则表达式:使用单词边界将变量传递给regexp
- 使用正则表达式中的变量与$和^匹配字符串
- 使用带有.match Regex表达式的变量的JavaScript
- 正则表达式提取PHP中的JavaScript变量
- 仅与字母字符匹配的正则表达式变量
- 使用正则表达式+变量的正则表达式
- 使用正则表达式变量作为普通变量- Javascript