如何在dc.js中的vars中放入过滤表达式?
How to put filteration expressions in vars in dc.js?
尝试使用代码附加方法在 crossfilter's 的 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 问题。
通常您不希望函数在某些情况下会 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;
});
尝试使用代码附加方法在 crossfilter's 的 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 问题。
通常您不希望函数在某些情况下会 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;
});